import AppSettings from "@runtime/base/AppSettings";
import { ClientMessage } from "@runtime/generate/message/ClientMessage";
import ModalComponent, { ModalOptions } from "@runtime/module/Modal/ModalComponent";
import RouterComponent from "@runtime/module/Router/RouterComponent";
import TimerComponent from "@runtime/module/Timer/TimerComponent";
import WebSocketComponent from "@runtime/module/WebSocket/WebSocketComponent";
import WebWindowComponent from "@runtime/module/WebWindow/WebWindowComponent";
import PostProcessLayerComponent from "@runtime/UnityEngineBridge/PostProcessLayerComponent";
import TooltipComponent from "@runtime/UnityEngineBridge/TooltipComponent";
import { useInterval } from "@vueuse/core";
import { Base64 } from "js-base64";
import { computed, ComputedRef, reactive, ref, Ref, toRaw, toRef, UnwrapNestedRefs, watch, WatchStopHandle } from "vue";
import ExamSettings, { Modules } from "./ExamSettings";

function ToMap<TKey, TValue>(sources: Array<TValue>, keySelector: (element: TValue) => TKey): Map<TKey, TValue> {
    const map = new Map<TKey, TValue>();
    for (const element of sources) {
        map.set(keySelector(element), element);
    }
    return map;
}

/**
 * 协议设置
 */
export class MillimeterWaveRadarConfig {
    /**
     * 协议Id数组
     */
    public ProtocolIds: Array<number> = [];
    /**
     * 物体识别数量 - 不为零
     */
    public Count: number = 1;
}

/**
 * 车道线识别设置
 */
export class BinocularCameraConfig {
    public File: string = '';
}

export class ExamConfig {
    public Title: string;
    public Section: string;
    public System: string;
    public Type: string;
    public Weight: number;

    public Settings: MillimeterWaveRadarConfig | BinocularCameraConfig | {} = {};

    constructor(title: string = '', section: string = '', system: string = '', type: string = '', weight: number = 0, contentTemplate: string = '', moduleOptions: Array<string> = [], systemOptions: Array<string> = [], typeOptions: Array<string> = []) {
        this.Title = title;
        this.Section = section;
        this.System = system;
        this.Type = type;
        this.Weight = weight;
    }
}

export class ExamContext {
    public Token: string = '';
    public Duration: number = 0;
    public ResultId: number = 0;
    public Mode: number = 0;
    public UserName: string = '';

    public Content?: string = '';

    public Configs: Array<ExamConfig> = [];

    public get HasMillimeterWaveRadarConfig(): boolean {
        return this.Configs.findIndex(config => config.System == '毫米波雷达') > -1;
    }

    public get HasBinocularCameraConfig(): boolean {
        return this.Configs.findIndex(config => config.System == '双目相机') > -1;
    }

    public get MillimeterWaveRadar(): MillimeterWaveRadarConfig {
        return this.Configs.find(config => config.System == '毫米波雷达')!.Settings as MillimeterWaveRadarConfig;
    }

    public get BinocularCamera(): BinocularCameraConfig {
        return this.Configs.find(config => config.System == '双目相机')!.Settings as BinocularCameraConfig;
    }

}

/**
 * 考试组件
 */
export default class ExamComponent {
    private static instance: ExamComponent = new ExamComponent();
    /**
     * 考试组件
     */
    public static get Default(): ExamComponent {
        return this.instance;
    }

    constructor() {
        window.addEventListener('unload', this.Dispose.bind(this));

        this.watchStopHandles.push(watch(toRef(ExamSettings.Default, 'Module'), this.OnModuleChangedAsync.bind(this)));
        // this.watchStopHandles.push(watch(this.IsCompleted, this.SubmitAsync.bind(this)));
    }

    Dispose() {
        window.removeEventListener('unload', this.Dispose);

        for (const watchStopHandle of this.watchStopHandles) {
            watchStopHandle();
        }
        this.watchStopHandles.clear();
    }

    public IsInitialized: Ref<boolean> = ref(false);

    /**
     * 当前是否处于加载状态
     */
    public IsLoading: Ref<boolean> = ref(false);

    public LoadingPercent: Ref<number> = ref(-1);

    public Duration: Ref<number> = useInterval(1000);

    public Context: UnwrapNestedRefs<ExamContext> = reactive(new ExamContext());

    public HasContext: ComputedRef<boolean> = computed(() => this.Context.Token != '');

    public Types: ComputedRef<Array<string>> = computed(() => ExamComponent.Default.HasContext.value ? ExamComponent.Default.Context.Configs.map(config => config.System) : ['毫米波雷达', '双目相机']);

    public IsCompleted: ComputedRef<boolean> = computed(() => {
        return this.HasContext.value && this.IsInitialized.value && this.Duration.value >= this.Context.Duration;
    });

    public HasAxisChanged: boolean = false;

    public FormattedDuration: ComputedRef<string> = computed(() => {
        const value = this.Context.Duration - this.Duration.value
        const hour = Math.floor(value / 3600).toString().padStart(2, '0');
        const minute = Math.floor(value % 3600 / 60).toString().padStart(2, '0');
        const second = (value % 3600 % 60).toString().padStart(2, '0');
        return `${hour}:${minute}:${second}`;
    });


    private isUploading = false;
    private lock = -1;
    private watchStopHandles: Array<WatchStopHandle> = [];

    public DeviceStatus: Ref<string> = ref('');

    public async Awake(): Promise<void> {
        ModalComponent.Default.AddDynamicModules(import.meta.glob('/src/components/Apps/Exam/Exit.vue'));
        ModalComponent.Default.AddDynamicModules(import.meta.glob('/src/components/Apps/Exam/MessageBox.vue'));

        WebWindowComponent.Default.SetBlackBackground();

        this.IsLoading.value = true;
        ExamSettings.Default.Module = 'Home';

        console.log(AppSettings.Default);
        console.log(AppSettings.Default.StartupParameter);

        if (import.meta.env.DEV) {
            AppSettings.Default.StartupParameter = 'eyJUb2tlbiI6ImV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpvZEhSd09pOHZjMk5vWlcxaGN5NTRiV3h6YjJGd0xtOXlaeTkzY3k4eU1EQTFMekExTDJsa1pXNTBhWFI1TDJOc1lXbHRjeTl1WVcxbGFXUmxiblJwWm1sbGNpSTZJalFpTENKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5M2N5OHlNREExTHpBMUwybGtaVzUwYVhSNUwyTnNZV2x0Y3k5dVlXMWxJam9pTVRVeE1qRXdNVGc1T0RFaUxDSm9kSFJ3T2k4dmMyTm9aVzFoY3k1NGJXeHpiMkZ3TG05eVp5OTNjeTh5TURBMUx6QTFMMmxrWlc1MGFYUjVMMk5zWVdsdGN5OWxiV0ZwYkdGa1pISmxjM01pT2lJeE5URXlNVEF4T0RrNE1VQnhjUzVqYjIwaUxDSkJjM0JPWlhRdVNXUmxiblJwZEhrdVUyVmpkWEpwZEhsVGRHRnRjQ0k2SWs5UlFUSkdObGxhU0RSSVdETktXVkZUVVZGTE5GSk5TakpXVVUwMlFVcFVJaXdpYUhSMGNEb3ZMM2QzZHk1aGMzQnVaWFJpYjJsc1pYSndiR0YwWlM1amIyMHZhV1JsYm5ScGRIa3ZZMnhoYVcxekwzUmxibUZ1ZEVsa0lqb2lNU0lzSW5OMVlpSTZJalFpTENKcWRHa2lPaUl6WTJFMk9ESTVOaTAzTmpoaExUUXpOekl0T0RjeU5pMDNOMkZpT0dJek5HRmtObVlpTENKcFlYUWlPakUyTmpZNE5EazNPRFFzSW01aVppSTZNVFkyTmpnME9UYzROQ3dpWlhod0lqb3hOalkyT1RNMk1UZzBMQ0pwYzNNaU9pSlRkR0Z5Y25sVGEzbFRaWEoyWlhJaUxDSmhkV1FpT2lKVGRHRnljbmxUYTNsVFpYSjJaWElpZlEuaEZha052eldpZG9ncFRXTUR0ZVdQcHYtV2ZWN0hCZTFKREdkNEFBaF8ydyIsIkZhdWx0UG9pbnRDb2xsZWN0aW9uIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMCwwLG51bGwsMCwwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjksNjQsMCwwLDUyLDAsMCxudWxsLG51bGwsbnVsbCxudWxsLDExMSw4MywxNiwwLDAsMCwwLG51bGwsbnVsbCxudWxsLG51bGwsMTI1LDE1LDE2MCwxMTIsMTI4LDI1LDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sIkR1cmF0aW9uIjozNjAwLCJSZXN1bHRJZCI6NDcxLCJNb2RlIjo0LCJVc2VyTmFtZSI6IuWtpueUnyIsIkNvbnRlbnQiOiJbe1wiVGl0bGVcIjpcIumhueebruS4gFwiLFwiU2VjdGlvblwiOlwi5q+r57Gz5rOi6Zu36L6+5bqU55SoXCIsXCJTeXN0ZW1cIjpcIuavq+exs+azoumbt+i+vlwiLFwiVHlwZVwiOlwi5aSn6ZmGQVJTNDA4XCIsXCJXZWlnaHRcIjoxMDAsXCJTZXR0aW5nc1wiOntcIkNvdW50XCI6MSxcIlByb3RvY29sSWRzXCI6WzE1NDYsMTU0N119fV0ifQ==';
        }
        // AppSettings.Default.StartupParameter = 'e30=';

        const config: ExamContext = JSON.parse(AppSettings.Default.StartupParameter == '{}' || JSON.stringify(AppSettings.Default.StartupParameter) == '{}' ? '{}' : Base64.decode(AppSettings.Default.StartupParameter as string)) ?? new ExamContext();

        console.log('config',config);
        if (config.Content != undefined) {            
            this.Context.Token = config.Token;
            this.Context.Duration = config.Duration;
            this.Context.ResultId = config.ResultId;
            this.Context.Mode = config.Mode;
            this.Context.UserName = config.UserName;            
            this.Context.Configs.splice(0, this.Context.Configs.length, ...JSON.parse(config.Content!));
            
            delete this.Context.Content;
        }
        console.log('11111111111',toRaw(this.Context));

        
        ExamSettings.Default.Name = config.UserName;

        // 启动Unity
        const configuration = JSON.stringify({
            LocalAddress: AppSettings.Default.LocalAddress,
            ShortName: 'P10059',
            Type: 8,
            Content: AppSettings.Default.StartupParameter,
        });
        console.log('configuration',JSON.parse(configuration));
        
        await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.EmbeddedApplicationLaunchRequest('../EmbeddedApplication/Unity/Mix.Unity.exe', configuration));
        
        // 获取Unity版本状态
        await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.EmbeddedApplicationVersionRequest());

        // // 无启动参数或有毫米波雷达启动参数
        // if (!this.HasContext || this.Context.HasMillimeterWaveRadarConfig) {
        //     await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.MillimeterWaveRadarDeviceInitializationRequest(
        //         ExamSettings.Default.MillimeterWaveRadarDeviceType,
        //         ExamSettings.Default.MillimeterWaveRadarDeviceIndex,
        //         ExamSettings.Default.MillimeterWaveRadarCanIndex,
        //     ));
        // }

        this.IsLoading.value = false;

        this.IsInitialized.value = true;

        if (this.Types.value.length == 0) {
            ExamSettings.Default.Module = 'Empty';
        } else {
            ExamSettings.Default.Module = Modules.value.find((config: { Description: string; }) => config.Description == this.Types.value[0])!.Name;
        }
    }

    public async Destroy(): Promise<void> {
    }

    public async OnExitAsync(): Promise<void> {
        const volume = await PostProcessLayerComponent.Default.AddVolumeAsync();
        const effect = await PostProcessLayerComponent.Default.AddKawaseBlurAsync(volume);

        const options = ModalOptions.Default()
            .WithPrefix('/src/components/Apps/Exam/')
            .WithType('Exit')
            .WithContent('是否确认退出软件?')
            .WithButtons(['确定', '取消']);
        const result = await ModalComponent.Default.PopupAsync(options);

        if (result == '确定') {
            WebSocketComponent.Default.PostMessage(new ClientMessage.ShutdownMessage());
        }

        await PostProcessLayerComponent.Default.RemoveEffectAsync(volume, effect);
        await PostProcessLayerComponent.Default.RemoveVolumeAsync(volume);
    }

    public async WaitLockAsync(): Promise<void> {
        this.IsLoading.value = true;

        const value = this.lock;
        this.lock += 1;
        while (this.lock != value) {
            if (this.lock == 0) {
                break;
            }
            await TimerComponent.Default.WaitAsync(10);
        }
    }

    public ReleaseLock(): void {
        this.lock -= 1;
        this.IsLoading.value = false;
    }

    /**
    * 模块发生变化时
    * @param value 模块
    */
    private async OnModuleChangedAsync(value: string): Promise<void> {
        const url = `/${AppSettings.Default.Type}/${value}`;
        await RouterComponent.Default.NavigateToAsync(url);
    }

    /**
     * 计算当前可见物体数量
     * @returns 当前可见物体数量
     */
    // private async CalculateCountAsync(): Promise<number> {
    //     // 没有这个消息码
    //     const response: ClientMessage.MillimeterWaveRadarObjectsCountResponse = await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.MillimeterWaveRadarObjectsCountRequest());
    //     return response.Count;
    // }

    public Percent = ref<number>(0);

    // public async SubmitAsync(): Promise<void> {
    //     // 如果已经提交成功过就return掉，不再继续走提交
    //     if (this.isUploading) {
    //         return;
    //     }
    //     this.isUploading = true;
        
    //     const url = import.meta.env.DEV ? `/api/SkillsContest/SubmitResult` : 'http://virtual.eduhenghong.cn:4497/api/SkillsContest/SubmitResult';
         
    //     const map = new Map<string, { Score: number, Weight: number }>([
    //         // ['安装', { Score: InstallComponent.Default.Percent.value, Weight: this.Context.Configs.find(config => config.Section == '安装')?.Weight ?? 0 }],
    //         // ['标定', { Score: CalibrationComponent.Default.Percent.value, Weight: this.Context.Configs.find(config => config.Section == '标定')?.Weight ?? 0 }],            
    //     ]);
        
    //     let score = 0;
    //     if (this.Context.HasBinocularCameraConfig) {
    //         score = this.Percent.value;
    //         map.set('应用', { Score: score, Weight: 100 });
    //     } else {
            
    //         const count = await this.CalculateCountAsync();
    //         score = ProtocolComponent.Default.CalculatePercent() + (this.HasAxisChanged && count < this.Context.MillimeterWaveRadar.Count + 1 ? 20 : 0);
    //         map.set('应用', { Score: score, Weight: 100 });
    //     }
    //     console.log('应用',map.get('应用'));
        
    //     // const types = ExamComponent.Default.Types.value;
    //     // const totalWeight = Array.from(map.entries()).filter(data => types.includes(data[0])).map(data => data[1]).reduce((accumulator, current) => current.Weight + accumulator, 0);
    //     // let score = 0;
    //     // for (const [type, data] of map) {
    //     //     if (types.includes(type)) {
    //     //         console.log(`${type} - 得分:${data.Score} - 权重:${data.Weight} - 加权得分:${data.Score * data.Weight / totalWeight}`);
    //     //         score += data.Score * data.Weight / totalWeight;
    //     //     }
    //     // }
    //     // score = Math.round(score);
    //     // const score = Math.round(InstallComponent.Default.Percent.value * 15 / 100 + CalibrationComponent.Default.Percent.value * 25 / 100 + ProtocolComponent.Default.Percent.value * 30 / 100 + UsageComponent.Default.Percent.value * 10 / 100);

    //     // console.log(`安装 - ${InstallComponent.Default.Percent.value} - ${InstallComponent.Default.Percent.value * 15 / 100}`);
    //     // console.log(`标定 - ${CalibrationComponent.Default.Percent.value} - ${CalibrationComponent.Default.Percent.value * 25 / 100}`);
    //     // console.log(`协议解读 - ${ProtocolComponent.Default.Percent.value} - ${ProtocolComponent.Default.Percent.value * 30 / 100}`);
    //     // console.log(`应用 - ${UsageComponent.Default.Percent.value} - ${UsageComponent.Default.Percent.value * 30 / 100}`);
        
    //     const data = {
    //         Id: this.Context.ResultId,
    //         Score: Math.trunc(Math.min(Math.max(score, 0), 100)),
    //         Time: this.Duration.value,
    //         Tool: 0,
    //         Standard: 0,
    //         Process: 0,
    //         Security: 0,
    //         Efficiency: 0,
    //     };
    //     // 把时间，分数和个人信息传到提交接口里
    //     const localData:any = {
    //         score: data.Score,
    //         time: data.Time,
    //         info: ExamSettings.Default.Name,
    //     };
    //     console.log('localData',localData);
    //     const AllData:any = {
    //         Id: this.Context.ResultId,
    //         Score: Math.trunc(Math.min(Math.max(score, 0), 100)),
    //         Time: this.Duration.value,
    //         Tool: 0,
    //         Standard: 0,
    //         Process: 0,
    //         Security: 0,
    //         Efficiency: 0,
    //         info: ExamSettings.Default.Name,
    //     };
    //     let msg = JSON.stringify(localData) + ',' +JSON.stringify(AllData);
    //     // 没有这个消息码
    //     await WebSocketComponent.Default.PostMessage(new ClientMessage.SaveLocalStorageMessage(msg));
    //     console.log('data: ',data);

    //     let success = false;

    //     try {
    //         const response = await fetch(url, {
    //             body: JSON.stringify(data),
    //             headers: {
    //                 'content-type': 'application/json',
    //                 'Authorization': `Bearer ${this.Context.Token}`,
    //             },
    //             method: 'POST',
    //         })
    //         // 如果提交成功了
    //         if (response.ok) {
    //             console.log('response',response);
    //             const result: { success: boolean, msg: string, error: string } = (await response.json()).result;
    //             success = result.success;
    //         }
    //     } catch (error) {    // 如果没有提交成功
    //         console.log('error: ',error);
    //         this.isUploading = false;
    //     }


    //     const options = ModalOptions.Default()
    //         .WithPrefix('/src/components/Apps/Exam/')
    //         .WithType('MessageBox')
    //         .WithContent(success ? '提交成功' : '提交失败，请重新提交！')
    //         .WithButtons(['确定']);
    //     await ModalComponent.Default.PopupAsync(options);

    //     if (success) {
    //         WebSocketComponent.Default.PostMessage(new ClientMessage.ShutdownMessage());
    //     }
    // }
}


/**
 * 协议定义
 */
export class ProtocolDefinitionConfig {
    Id: number;
    Type: number;
    Sign: string;
    StartIndex: string;
    Length: string;
    Min: string;
    Max: string;
    Resolution: string;
    Unit: string;
    Description: string;

    Value: string = '';
    Reference: string = '';

    constructor(id: number, type: number, sign: string, startIndex: string, length: string, min: string, max: string, resolution: string, unit: string, description: string) {
        this.Id = id;
        this.Type = type;
        this.Sign = sign;
        this.StartIndex = startIndex;
        this.Length = length;
        this.Min = min;
        this.Max = max;
        this.Resolution = resolution;
        this.Unit = unit;
        this.Description = description;
    }
}

/**
 * 协议图表定义
 */
export class ProtocolGraphConfig {
    Id: number;
    Type: number;
    Index: number;
    Line: string;
    LT: string;
    LB: string;
    Color: string;

    constructor(id: number, type: number, index: number, line: string, lt: string, lb: string, color: string) {
        this.Id = id;
        this.Type = type;
        this.Index = index;
        this.Line = line;
        this.LT = lt;
        this.LB = lb;
        this.Color = color;
    }
}

/**
 * 协议解读组件
 */
export class ProtocolComponent {
    private static instance: ProtocolComponent = new ProtocolComponent();
    /**
     * 协议解读组件
     */
    public static get Default(): ProtocolComponent {
        return this.instance;
    }

    constructor() {
        window.addEventListener('unload', this.Dispose.bind(this));

        this.watchStopHandles.push(watch(this.Type, this.OnTypeChangedAsync.bind(this)));
        this.watchStopHandles.push(watch(this.DataSource, this.OnDataSourceChanged.bind(this)));
    }

    Dispose() {
        window.removeEventListener('unload', this.Dispose);

        for (const watchStopHandle of this.watchStopHandles) {
            watchStopHandle();
        }
        this.watchStopHandles.clear();
    }

    public DefinitionConfigs: Array<ProtocolDefinitionConfig> = [
        { "Id": 1001, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_NVMReadStatus", "StartIndex": "6", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0：失败\n0x1：成功", "Description": "启动时从非易失性存储器读取配置参数的状态" },
        { "Id": 1002, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_NVMwriteStatus", "StartIndex": "7", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0：失败\n0x1：成功", "Description": "将配置参数存储到非易失性存储器中的状态（最初该值设置为0x0，在配置发送和成功存储后设置为0x1）" },
        { "Id": 1003, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_MaxDistanceCfg", "StartIndex": "22", "Length": "10", "Min": "0", "Max": "2046", "Resolution": "2", "Unit": "m (标准版本支持196 m-260 m 可配置)", "Description": "最大距离的配置" },
        { "Id": 1009, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_SensorID", "StartIndex": "32", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "传感器ID（0-7）", "Description": "传感器ID 0-7" },
        { "Id": 1010, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_SortIndex", "StartIndex": "36", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：不分类\n0x1：按范围排序\n0x2：按RCS排序", "Description": "当前object列表排列索引方式" },
        { "Id": 1011, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_RadarPowerCfg", "StartIndex": "39", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：标准\n0x1：-3dB 发射增益\n0x2：-6dB 发射增益\n0x3：-9dB 发射增益", "Description": "雷达功率参数的配置" },
        { "Id": 1012, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_CtrlRelayCfg", "StartIndex": "41", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0：未激活\n0x1：激活", "Description": "如果为真，则发送继电器控制消息" },
        { "Id": 1013, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_OutputTypeCfg", "StartIndex": "42", "Length": "2", "Min": "0", "Max": "3", "Resolution": "1", "Unit": "0x0：无\n0x1：objects\n0x2：clusters", "Description": "当前输出类型为clusters或objects" },
        { "Id": 1014, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_SendQualityCfg", "StartIndex": "44", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0：未激活\n0x1：激活", "Description": "如果为真，则发送clusters或objects的质量信息" },
        { "Id": 1015, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_SendExtInfoCfg", "StartIndex": "45", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0：未激活\n0x1：激活", "Description": "如果为真，则发送objects的扩展信息" },
        { "Id": 1016, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_MotionRxState", "StartIndex": "46", "Length": "2", "Min": "0", "Max": "3", "Resolution": "1", "Unit": "0x0：输入ok\n0x1：速度缺失\n0x2：横摆角速度缺失\n0x3：速度和横摆角速度缺失", "Description": "显示输入信号速度和横摆角速度的状态。" },
        { "Id": 1017, "Type": 0x201, "Value": '', "Reference": '', "Sign": "RadarState_RCS_Threshold", "StartIndex": "58", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0 标准\n0x1 高灵敏度", "Description": "如果为真，责激活传感器的高灵敏度" },
        { "Id": 1101, "Type": 0x203, "Value": '', "Reference": '', "Sign": "FilterState_NofClusterFilterCfg", "StartIndex": "3", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "", "Description": "已配置的Cluster过滤器的状态消息数量" },
        { "Id": 1102, "Type": 0x203, "Value": '', "Reference": '', "Sign": "FilterState_NofObjectFilterCfg", "StartIndex": "11", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "", "Description": "已配置的Object过滤器的状态消息数量" },
        { "Id": 1201, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Active", "StartIndex": "22", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0：无效\n0x1：有效", "Description": "过滤器激活开关" },
        { "Id": 1202, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Index", "StartIndex": "3", "Length": "4", "Min": "0", "Max": "15", "Resolution": "1", "Unit": "见表4", "Description": "指定要配置的过滤条件（0x0到0xF）" },
        { "Id": 1203, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Type", "StartIndex": "7", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0：Cluster过滤\n0x1：Object过滤", "Description": "可在object或cluster过滤器配置之间进行选择" },
        { "Id": 1204, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_NofObj", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "4095", "Resolution": "1", "Unit": "不使用", "Description": "过滤条件的最小值。" },
        { "Id": 1205, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_Distance", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "409.5", "Resolution": "0.1", "Unit": "m", "Description": "过滤条件的最小值。" },
        { "Id": 1206, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_Azimuth", "StartIndex": "16", "Length": "12", "Min": "-50", "Max": "52.378", "Resolution": "0.025", "Unit": "deg", "Description": "过滤条件的最小值。" },
        { "Id": 1207, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_VrelOncome", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最小值。" },
        { "Id": 1208, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_VrelDepart", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最小值。" },
        { "Id": 1209, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_RCS", "StartIndex": "16", "Length": "12", "Min": "-50", "Max": "52.375", "Resolution": "0.025", "Unit": "dBm2", "Description": "过滤条件的最小值。" },
        { "Id": 1210, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_Lifetime", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "409.5", "Resolution": "0.1", "Unit": "s", "Description": "过滤条件的最小值。" },
        { "Id": 1211, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_Size", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "102.375", "Resolution": "0.025", "Unit": "m2", "Description": "过滤条件的最小值。" },
        { "Id": 1212, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_ProbExists", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：0%\n0x1：25%\n0x2：50%\n0x3：75%\n0x4：90%\n0x5：99%\n0x6：99.9%\n0x7：100%", "Description": "过滤条件的最小值。" },
        { "Id": 1213, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_Y", "StartIndex": "16", "Length": "12", "Min": "-409.5", "Max": "409.5", "Resolution": "0.2", "Unit": "m", "Description": "过滤条件的最小值。" },
        { "Id": 1214, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_X", "StartIndex": "16", "Length": "", "Min": "-500", "Max": "1138.2", "Resolution": "0.2", "Unit": "m", "Description": "过滤条件的最小值。" },
        { "Id": 1215, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_VYLeftRight", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最小值。" },
        { "Id": 1216, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_VXOncome", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最小值。" },
        { "Id": 1217, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_VYRightLeft", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最小值。" },
        { "Id": 1218, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Min_VXDepart", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最小值。" },
        { "Id": 1219, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_NofObj", "StartIndex": "32", "Length": "12", "Min": "0", "Max": "4095", "Resolution": "1", "Unit": "", "Description": "过滤条件的最大值。" },
        { "Id": 1220, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_Distance", "StartIndex": "32", "Length": "12", "Min": "0", "Max": "409.5", "Resolution": "0.1", "Unit": "m", "Description": "过滤条件的最大值。" },
        { "Id": 1221, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_Azimuth", "StartIndex": "32", "Length": "12", "Min": "-50", "Max": "52.375", "Resolution": "0.025", "Unit": "deg", "Description": "过滤条件的最大值。" },
        { "Id": 1222, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_VrelOncome", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最大值。" },
        { "Id": 1223, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_VrelDepart", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最大值。" },
        { "Id": 1224, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_RCS", "StartIndex": "32", "Length": "12", "Min": "-50", "Max": "52.975", "Resolution": "0.025", "Unit": "dBm2", "Description": "过滤条件的最大值。" },
        { "Id": 1225, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_Lifetime", "StartIndex": "32", "Length": "12", "Min": "0", "Max": "409.5", "Resolution": "0.1", "Unit": "s", "Description": "过滤条件的最大值。" },
        { "Id": 1226, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_Size", "StartIndex": "32", "Length": "12", "Min": "0", "Max": "102.375", "Resolution": "0.025", "Unit": "m2", "Description": "过滤条件的最大值。" },
        { "Id": 1227, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_ProbExists", "StartIndex": "32", "Length": "12", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：0%\n0x1：25%\n0x2：50%\n0x3：75%\n0x4：90%\n0x5：99%\n0x6：99.9%\n0x7：100%", "Description": "过滤条件的最大值。" },
        { "Id": 1228, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_Y", "StartIndex": "16", "Length": "12", "Min": "-409.5", "Max": "409.5", "Resolution": "0.2", "Unit": "m", "Description": "过滤条件的最大值。" },
        { "Id": 1229, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_X", "StartIndex": "16", "Length": "", "Min": "-500", "Max": "1138.2", "Resolution": "0.2", "Unit": "m", "Description": "过滤条件的最大值。" },
        { "Id": 1230, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_VYLeftRight", "StartIndex": "16", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最大值。" },
        { "Id": 1231, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_VXOncome", "StartIndex": "32", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最大值。" },
        { "Id": 1232, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_VYRightLeft", "StartIndex": "32", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最大值。" },
        { "Id": 1233, "Type": 0x204, "Value": '', "Reference": '', "Sign": "FilterState_Max_VXDepart", "StartIndex": "32", "Length": "12", "Min": "0", "Max": "128.993", "Resolution": "0.0315", "Unit": "m/s", "Description": "过滤条件的最大值。" },
        { "Id": 1301, "Type": 0x408, "Value": '', "Reference": '', "Sign": "CollDetState_Activation", "StartIndex": "1", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0：未激活\n0x1：激活", "Description": "碰撞检测状态激活" },
        { "Id": 1302, "Type": 0x408, "Value": '', "Reference": '', "Sign": "CollDetState_NofRegions", "StartIndex": "4", "Length": "4", "Min": "0", "Max": "8", "Resolution": "1", "Unit": "", "Description": "已配置区域的数量" },
        { "Id": 1303, "Type": 0x408, "Value": '', "Reference": '', "Sign": "CollDetState_MeasCounter", "StartIndex": "24", "Length": "16", "Min": "0", "Max": "66635", "Resolution": "1", "Unit": "", "Description": "测量循环计数器（自传感器启动以来计数，并在> \n65535时重新启动）" },
        { "Id": 1401, "Type": 0x402, "Value": '', "Reference": '', "Sign": "CollDetRegState_WarningLevel", "StartIndex": "3", "Length": "2", "Min": "0", "Max": "0", "Resolution": "1", "Unit": "0x0：无报警\n0x1：目标报警\n0x2：未使用\n0x3：停止报警", "Description": "表示某个对象位于该区域内，或者曾经在区内。\n如果它是0x0，则该区域内未检测到任何目标。\n如果它是0x1，则当前有物体位于该区域内并且\n已超过了CollDetCfg_MinTime中配置的最小检\n测时间。\n0x2为未使用。\n如果它是0x3，则之前有一个目标已进入该区域，\n但现在已经离开。\n要将警告级别重置为0x0，请使用\nCollDetCfg_WarningReset" },
        { "Id": 1402, "Type": 0x402, "Value": '', "Reference": '', "Sign": "CollDetRegState_RegionID", "StartIndex": "5", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "", "Description": "当前区域的ID编号" },
        { "Id": 1403, "Type": 0x402, "Value": '', "Reference": '', "Sign": "CollDetRegState_Point1X", "StartIndex": "19", "Length": "13", "Min": "-500", "Max": "1138.2", "Resolution": "0.2", "Unit": "m", "Description": "1st X（纵向）矩形区域的坐标" },
        { "Id": 1404, "Type": 0x402, "Value": '', "Reference": '', "Sign": "CollDetRegState_Point1Y", "StartIndex": "24", "Length": "11", "Min": "-204.6", "Max": "204.8", "Resolution": "0.2", "Unit": "m", "Description": "1st Y（横向）矩形区域的坐标" },
        { "Id": 1405, "Type": 0x402, "Value": '', "Reference": '', "Sign": "CollDetRegState_Point2X", "StartIndex": "43", "Length": "13", "Min": "-500", "Max": "1138.2", "Resolution": "0.2", "Unit": "m", "Description": "2nd X（纵向）矩形区域的坐标" },
        { "Id": 1406, "Type": 0x402, "Value": '', "Reference": '', "Sign": "CollDetRegState_Point2Y", "StartIndex": "48", "Length": "11", "Min": "-204.6", "Max": "204.8", "Resolution": "0.2", "Unit": "m", "Description": "2nd Y（横向）矩形区域的坐标" },
        { "Id": 1407, "Type": 0x402, "Value": '', "Reference": '', "Sign": "CollDetRegState_NofObjects", "StartIndex": "56", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "当前在区域内检测到的满足碰撞检测条件的目标数量。" },
        { "Id": 1501, "Type": 0x600, "Value": '', "Reference": '', "Sign": "Cluster_NofClustersNear", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "近距离扫描中检测到的clusters点数" },
        { "Id": 1502, "Type": 0x600, "Value": '', "Reference": '', "Sign": "Cluster_NofClustersFar", "StartIndex": "8", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "远程扫描中检测到的clusters点数量（近距离和远距离\n一起最多输出250个clusters点;在激活质量信息应用的\n情况下输出110-120clusters点，以避免CAN总线负载超\n限）" },
        { "Id": 1503, "Type": 0x600, "Value": '', "Reference": '', "Sign": "Cluster_MeasCounter", "StartIndex": "24", "Length": "16", "Min": "0", "Max": "65535", "Resolution": "1", "Unit": "", "Description": "测量循环计数器（自传感器启动以来计数，并在>65535\n时重新启动计数）" },
        { "Id": 1504, "Type": 0x600, "Value": '', "Reference": '', "Sign": "Cluster_InterfaceVersion", "StartIndex": "36", "Length": "4", "Min": "0", "Max": "15", "Resolution": "1", "Unit": "", "Description": "Cluster列表接口版本" },
        { "Id": 1601, "Type": 0x701, "Value": '', "Reference": '', "Sign": "Cluster_ID", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "Cluster 编号" },
        { "Id": 1602, "Type": 0x701, "Value": '', "Reference": '', "Sign": "Cluster_DistLong", "StartIndex": "19", "Length": "13", "Min": "-500", "Max": "1138.2", "Resolution": "0.2", "Unit": "m", "Description": "纵向（x）坐标" },
        { "Id": 1603, "Type": 0x701, "Value": '', "Reference": '', "Sign": "Cluster_DistLat", "StartIndex": "24", "Length": "10", "Min": "-102.3", "Max": "102.3", "Resolution": "0.2", "Unit": "m", "Description": "横向（y）坐标" },
        { "Id": 1604, "Type": 0x701, "Value": '', "Reference": '', "Sign": "Cluster_VrelLong", "StartIndex": "46", "Length": "10", "Min": "-128.00", "Max": "127.75", "Resolution": "0.25", "Unit": "m/s", "Description": "纵向相对速度（x）" },
        { "Id": 1605, "Type": 0x701, "Value": '', "Reference": '', "Sign": "Cluster_DynProp", "StartIndex": "48", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：移动的\n0x1：静止的\n0x2：来向的\n0x3：可能静止的\n0x4：未知的\n0x5：横穿静止的\n0x6：横穿的\n0x7：停止的", "Description": "cluster动态属性表示是否移动" },
        { "Id": 1606, "Type": 0x701, "Value": '', "Reference": '', "Sign": "Cluster_VrelLat", "StartIndex": "53", "Length": "9", "Min": "-64.00", "Max": "63.75", "Resolution": "0.25", "Unit": "m/s", "Description": "横向相对速度（y）" },
        { "Id": 1607, "Type": 0x701, "Value": '', "Reference": '', "Sign": "Cluster_RCS", "StartIndex": "56", "Length": "8", "Min": "-64.0", "Max": "63.5", "Resolution": "0.5", "Unit": "dBm2", "Description": "雷达散射截面积" },
        { "Id": 1701, "Type": 0x702, "Value": '', "Reference": '', "Sign": "Cluster_ID", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "Cluster 编号" },
        { "Id": 1702, "Type": 0x702, "Value": '', "Reference": '', "Sign": "Cluster_DistLong_rms", "StartIndex": "11", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "", "Description": "纵向距离的标准差" },
        { "Id": 1703, "Type": 0x702, "Value": '', "Reference": '', "Sign": "Cluster_VrelLong_rms", "StartIndex": "17", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "", "Description": "横向距离的标准差" },
        { "Id": 1704, "Type": 0x702, "Value": '', "Reference": '', "Sign": "Cluster_DistLat_rms", "StartIndex": "22", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "", "Description": "纵向速度的标准差" },
        { "Id": 1705, "Type": 0x702, "Value": '', "Reference": '', "Sign": "Cluster_Pdh0", "StartIndex": "24", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：无效\n0x1：<25%\n0x2：<50%\n0x3：<75%\n0x4：<90%\n0x5：<99%\n0x6：<99.9%\n0x7：<=100%", "Description": "Cluster的误报概率（即由多路径或类似原因引起的人为事件的概率）" },
        { "Id": 1706, "Type": 0x702, "Value": '', "Reference": '', "Sign": "Cluster_VrelLat_rms", "StartIndex": "28", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "", "Description": "横向速度的标准差" },
        { "Id": 1707, "Type": 0x702, "Value": '', "Reference": '', "Sign": "Cluster_AmbigState", "StartIndex": "32", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：无效(无法使用)\n0x1： 模糊度 (cluster不清楚，因为有模糊(黑暗，模糊)， (不应该使用，也不推荐，因为它可能出现两次甚至更多次)\n0x2 ： 交 错 斜 坡(cluster的模糊性(模糊性)得到了部分的解决，因此cluster的模糊性不明显)，(不应该使用，也不推荐)\n0x3： 明确的(一切都清楚，模糊（模糊）已经解决-可以使用和建议使用)\n0x4： 静止状态(一切都很清楚，可能有一些固定的（固定的）因为模糊性已经解决-它可以被使用并推荐使用)", "Description": "多普勒状态（径向速度）模糊度（见表38中的第七个原始更多细节）" },
        { "Id": 1708, "Type": 0x702, "Value": '', "Reference": '', "Sign": "Cluster_InvalidState", "StartIndex": "35", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "0x00：有效\n0x01：由于RCS较低而无效\n0x02：由于近距的物品而无效\n0x03：因为未在近距离内确认，远Cluster无效。\n0x04：具有低RCS的有效Cluster\n0x05：保留位\n0x06：具有低RCS的有效Cluster\n0x07：因外部传感器视野而无效\n0x08：由于高度而具有方位角校正的有效的Cluster\n0x09：具有高概率的有效的Cluster\n0x0A：具有50%可能的 伪 影 造 成 的 有 效Cluster\n0x0B：没有最大值的有Cluster\n0x0C：具有高伪影概率的有效Cluster\n0x0D：保留位\n0x0E：由于谐波而造成的无效Cluster\n0x0F：在近范围内超过95米的有效Cluster\n0x10：具有高概率多目标的有效的cluster\n0x11：具有可疑角度的有效cluster", "Description": "Cluster有效性状态（有关详细信息，请参阅表38）" },
        { "Id": 1801, "Type": 0x60A, "Value": '', "Reference": '', "Sign": "Object_NofObjects", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "objects数量(最大100 Objects)" },
        { "Id": 1802, "Type": 0x60A, "Value": '', "Reference": '', "Sign": "Object_MeasCounter", "StartIndex": "16", "Length": "16", "Min": "0", "Max": "65535", "Resolution": "1", "Unit": "", "Description": "测量循环计数器（自传感器启动计数> 65535时0\n重新启动）" },
        { "Id": 1803, "Type": 0x60A, "Value": '', "Reference": '', "Sign": "Object_InterfaceVersion", "StartIndex": "28", "Length": "4", "Min": "0", "Max": "15", "Resolution": "1", "Unit": "", "Description": "Object 列表CAN 接口版本" },
        { "Id": 1901, "Type": 0x60B, "Value": '', "Reference": '', "Sign": "Object_ID", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "Object ID (由于目标是被跟踪的，所以ID在整个测量周期中都保持不变，而不必是连续的)" },
        { "Id": 1902, "Type": 0x60B, "Value": '', "Reference": '', "Sign": "Object_DistLong", "StartIndex": "19", "Length": "13", "Min": "-500", "Max": "1138.2", "Resolution": "0.2", "Unit": "m", "Description": "纵(x)坐标" },
        { "Id": 1903, "Type": 0x60B, "Value": '', "Reference": '', "Sign": "Object_DistLat", "StartIndex": "24", "Length": "11", "Min": "-204.6", "Max": "204.8", "Resolution": "0.2", "Unit": "m", "Description": "横向(y)坐标" },
        { "Id": 1904, "Type": 0x60B, "Value": '', "Reference": '', "Sign": "Object_VrelLong", "StartIndex": "46", "Length": "10", "Min": "-128.00", "Max": "127.75", "Resolution": "0.25", "Unit": "m/s", "Description": "纵向相对速度(x)" },
        { "Id": 1905, "Type": 0x60B, "Value": '', "Reference": '', "Sign": "Object_DynProp", "StartIndex": "48", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：移动\n0x1：静止\n0x2：来向\n0x3：可能静止\n0x4：未知\n0x5：横穿静止\n0x6：横穿移动\n0x7：停止", "Description": "物体的动态特性，指示物体是运动还是静止(只有正确给出速度和横摆角速度，才能正确确定该值)" },
        { "Id": 1906, "Type": 0x60B, "Value": '', "Reference": '', "Sign": "Object_VrelLat", "StartIndex": "53", "Length": "9", "Min": "-64.00", "Max": "63.75", "Resolution": "0.25", "Unit": "m/s", "Description": "横向相对速度(y)" },
        { "Id": 1907, "Type": 0x60B, "Value": '', "Reference": '', "Sign": "Object_RCS", "StartIndex": "56", "Length": "8", "Min": "-64.0", "Max": "63.5", "Resolution": "0.5", "Unit": "dBm2", "Description": "雷达散射截面积" },
        { "Id": 2001, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_ID", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "Object ID（由于目标是被跟踪的，所以ID在整个测量周期中都保持不变，而不必是连续的）" },
        { "Id": 2002, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_DistLong_rms", "StartIndex": "11", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "见表49", "Description": "纵向距离的标准差" },
        { "Id": 2003, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_VrelLong_rms", "StartIndex": "17", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "见表49", "Description": "纵向相对速度的标准差" },
        { "Id": 2004, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_DistLat_rms", "StartIndex": "22", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "见表49", "Description": "横向距离的标准差" },
        { "Id": 2005, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_VrelLat_rms", "StartIndex": "28", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "见表49", "Description": "横向相对速度的标准差" },
        { "Id": 2006, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_ArelLat_rms", "StartIndex": "34", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "见表49", "Description": "横向相对加速度的标准差" },
        { "Id": 2007, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_ArelLong_rms", "StartIndex": "39", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "见表49", "Description": "纵向相对加速度的标准差" },
        { "Id": 2008, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_Orientation_rms", "StartIndex": "45", "Length": "5", "Min": "0", "Max": "31", "Resolution": "1", "Unit": "deg", "Description": "方向角的标准差" },
        { "Id": 2009, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_MeasState", "StartIndex": "50", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：删除\n0x1：新的\n0x2：测量\n0x3：预测\n0x4：合并删除\n0x5：合并出新", "Description": "检测状态指示object是否有效并且已在新的测量周期中由clusters确认：\n0x0：删除Object-已删除Object在Object ID消失之前的最后一次传输周期中显示。\n0x1：创建新的Object –在创建Object ID后的第一个传输周期中显示。也可通Object_MeasCounter信息进行检查。\n0x2：测量-Object的创建已通过实际测量确认。可以创建Cluster。\n0x3：预测-实际测量无法确认Object创建。无法创建Cluster。\n0x4：融合删除-为了与另一个Object融合，而删除该Object\n0x5：合并出新-目标合并后创建了新Object。" },
        { "Id": 2010, "Type": 0x60C, "Value": '', "Reference": '', "Sign": "Obj_ProbOfExist", "StartIndex": "53", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：无效\n0x1：<25%\n0x2：<50%\n0x3：<75%\n0x4：<90%\n0x5：<99%\n0x6：<99.9%\n0x7：<=100%", "Description": "目标存在的可能性" },
        { "Id": 2101, "Type": 0x60D, "Value": '', "Reference": '', "Sign": "Object_ID", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "Object ID（由于目标是被跟踪的，所以ID在整个测量周期中都保持不变，而不必是连续的）" },
        { "Id": 2102, "Type": 0x60D, "Value": '', "Reference": '', "Sign": "Object_ArelLong", "StartIndex": "21", "Length": "11", "Min": "-10.00", "Max": "10.47", "Resolution": "0.01", "Unit": "m/s2", "Description": "纵向相对加速度" },
        { "Id": 2103, "Type": 0x60D, "Value": '', "Reference": '', "Sign": "Object_Class", "StartIndex": "24", "Length": "3", "Min": "0", "Max": "7", "Resolution": "1", "Unit": "0x0：点\n0x1：小汽车\n0x2：卡车\n0x3：行人\n0x4：摩托车\n0x5：自行车\n0x6：宽大的\n0x7：保留", "Description": "0x0：点\n0x1：小汽车\n0x2：卡车\n0x3：行人\n0x4：摩托车\n0x5：自行车\n0x6：宽广的\n0x7：保留" },
        { "Id": 2104, "Type": 0x60D, "Value": '', "Reference": '', "Sign": "Object_ArelLat", "StartIndex": "28", "Length": "9", "Min": "-2.50", "Max": "2.61", "Resolution": "0.01", "Unit": "m/s2", "Description": "横向相对加速度" },
        { "Id": 2105, "Type": 0x60D, "Value": '', "Reference": '', "Sign": "Object_OrientationAngel", "StartIndex": "46", "Length": "10", "Min": "-180.00", "Max": "180", "Resolution": "0.4", "Unit": "度", "Description": "目标的方向角" },
        { "Id": 2106, "Type": 0x60D, "Value": '', "Reference": '', "Sign": "Object_Length", "StartIndex": "48", "Length": "8", "Min": "0.0", "Max": "51.0", "Resolution": "0.2", "Unit": "m", "Description": "被跟踪对象的长度" },
        { "Id": 2107, "Type": 0x60D, "Value": '', "Reference": '', "Sign": "Object_Width", "StartIndex": "56", "Length": "8", "Min": "0.0", "Max": "51.0", "Resolution": "0.2", "Unit": "m", "Description": "被跟踪对象的宽度" },
        { "Id": 2201, "Type": 0x60E, "Value": '', "Reference": '', "Sign": "Object_ID", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "Object ID（由于目标是被跟踪的，所以ID在整个测量周期中都保持不变，而不必是连续的）" },
        { "Id": 2202, "Type": 0x60E, "Value": '', "Reference": '', "Sign": "Object_CollDetRegionBitfield", "StartIndex": "8", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "区域的字段，对于与此对象发生冲突的区域，将\n位设置1" },
        { "Id": 2301, "Type": 0x700, "Value": '', "Reference": '', "Sign": "Version_MajorRelease", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "软件主要版本" },
        { "Id": 2302, "Type": 0x700, "Value": '', "Reference": '', "Sign": "Version_MinorRelease", "StartIndex": "8", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "软件次要版本" },
        { "Id": 2303, "Type": 0x700, "Value": '', "Reference": '', "Sign": "Version_PatchLevel", "StartIndex": "16", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "", "Description": "软件补丁级别" },
        { "Id": 2304, "Type": 0x700, "Value": '', "Reference": '', "Sign": "Version_ExtendedRange", "StartIndex": "25", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0 – 标准距离版本\n0x1 – 扩展距离版本，不会增加发射功率", "Description": "韩国/日本的版本降低为-3dB的功率输出" },
        { "Id": 2305, "Type": 0x700, "Value": '', "Reference": '', "Sign": "Version_CountryCode", "StartIndex": "24", "Length": "1", "Min": "0", "Max": "1", "Resolution": "1", "Unit": "0x0 – 国际版\n0x1 – 韩国，日本-要求降低功率", "Description": "可以使用以下限制配置最大范围\nARS408：\n标准距离：96 – 260 m\n扩展距离：96 – 1200 m\nARS404：\n标准距离：150 – 190 m\n扩展距离：90 – 1000 m" },
        { "Id": 2401, "Type": 0x8, "Value": '', "Reference": '', "Sign": "CollDetRelayCtrl_Param", "StartIndex": "0", "Length": "8", "Min": "0", "Max": "255", "Resolution": "1", "Unit": "Bit 0： 继电器 1\nBit 1： 继电器 2\nBit 2： 继电器 3\nBit 3： 继电器 4\nBit 4： 保留\nBit 5： 保留\nBit 6： 保留\nBit 7： 保留", "Description": "模块上4个继电器的控制位" },
    ];

    public GraphConfigs: Array<ProtocolGraphConfig> = [
        { "Id": 1001, "Type": 0x201, "Index": 7, "Line": "2", "LT": "RadarState_NVMwriteStatus", "LB": "", "Color": "orange" },
        { "Id": 1002, "Type": 0x201, "Index": 6, "Line": "2", "LT": "RadarState_NVMReadStatus", "LB": "", "Color": "lime" },
        { "Id": 1003, "Type": 0x201, "Index": 5, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1004, "Type": 0x201, "Index": 4, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1005, "Type": 0x201, "Index": 3, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1006, "Type": 0x201, "Index": 2, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1007, "Type": 0x201, "Index": 1, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1008, "Type": 0x201, "Index": 0, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1009, "Type": 0x201, "Index": 15, "Line": "0", "LT": "RadarState_MaxDistanceCfg", "LB": "msb", "Color": "teal" },
        { "Id": 1010, "Type": 0x201, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 1011, "Type": 0x201, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 1012, "Type": 0x201, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 1013, "Type": 0x201, "Index": 11, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 1014, "Type": 0x201, "Index": 10, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 1015, "Type": 0x201, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 1016, "Type": 0x201, "Index": 8, "Line": "7", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 1017, "Type": 0x201, "Index": 23, "Line": "3", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 1018, "Type": 0x201, "Index": 22, "Line": "8", "LT": "RadarState_MaxDistanceCfg", "LB": "lsb", "Color": "teal" },
        { "Id": 1019, "Type": 0x201, "Index": 21, "Line": "2", "LT": "", "LB": "", "Color": "" },
        { "Id": 1020, "Type": 0x201, "Index": 20, "Line": "2", "LT": "", "LB": "", "Color": "" },
        { "Id": 1021, "Type": 0x201, "Index": 19, "Line": "2", "LT": "", "LB": "", "Color": "" },
        { "Id": 1022, "Type": 0x201, "Index": 18, "Line": "2", "LT": "", "LB": "", "Color": "" },
        { "Id": 1023, "Type": 0x201, "Index": 17, "Line": "2", "LT": "", "LB": "", "Color": "" },
        { "Id": 1024, "Type": 0x201, "Index": 16, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1025, "Type": 0x201, "Index": 31, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1026, "Type": 0x201, "Index": 30, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1027, "Type": 0x201, "Index": 29, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1028, "Type": 0x201, "Index": 28, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1029, "Type": 0x201, "Index": 27, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1030, "Type": 0x201, "Index": 26, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1031, "Type": 0x201, "Index": 25, "Line": "0", "LT": "RadarState_RadarPowerCfg", "LB": "msb", "Color": "hotpink" },
        { "Id": 1032, "Type": 0x201, "Index": 24, "Line": "7", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 1033, "Type": 0x201, "Index": 39, "Line": "5", "LT": "RadarState_RadarPowerCfg", "LB": "lsb", "Color": "hotpink" },
        { "Id": 1034, "Type": 0x201, "Index": 38, "Line": "0", "LT": "RadarState_SortIndex", "LB": "msb", "Color": "forestgreen" },
        { "Id": 1035, "Type": 0x201, "Index": 37, "Line": "6", "LT": "", "LB": "", "Color": "forestgreen" },
        { "Id": 1036, "Type": 0x201, "Index": 36, "Line": "8", "LT": "", "LB": "lsb", "Color": "forestgreen" },
        { "Id": 1037, "Type": 0x201, "Index": 35, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1038, "Type": 0x201, "Index": 34, "Line": "0", "LT": "RadarState_SensorID", "LB": "msb", "Color": "greenyellow" },
        { "Id": 1039, "Type": 0x201, "Index": 33, "Line": "6", "LT": "", "LB": "", "Color": "greenyellow" },
        { "Id": 1040, "Type": 0x201, "Index": 32, "Line": "8", "LT": "", "LB": "lsb", "Color": "greenyellow" },
        { "Id": 1041, "Type": 0x201, "Index": 47, "Line": "0", "LT": "RadarState_MotionRxState", "LB": "msb", "Color": "lightsalmon" },
        { "Id": 1042, "Type": 0x201, "Index": 46, "Line": "8", "LT": "", "LB": "lsb", "Color": "lightsalmon" },
        { "Id": 1043, "Type": 0x201, "Index": 45, "Line": "2", "LT": "RadarState_SendExtInfoCfg", "LB": "", "Color": "magenta" },
        { "Id": 1044, "Type": 0x201, "Index": 44, "Line": "2", "LT": "RadarState_SendQualityCfg", "LB": "", "Color": "lightgreen" },
        { "Id": 1045, "Type": 0x201, "Index": 43, "Line": "0", "LT": "RadarState_OutputTypeCfg", "LB": "msb", "Color": "limegreen" },
        { "Id": 1046, "Type": 0x201, "Index": 42, "Line": "8", "LT": "", "LB": "lsb", "Color": "limegreen" },
        { "Id": 1047, "Type": 0x201, "Index": 41, "Line": "2", "LT": "RadarState_CtrlRelayCfg", "LB": "", "Color": "lightseagreen" },
        { "Id": 1048, "Type": 0x201, "Index": 40, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1049, "Type": 0x201, "Index": 55, "Line": "0", "LT": "", "LB": "", "Color": "" },
        { "Id": 1050, "Type": 0x201, "Index": 54, "Line": "6", "LT": "", "LB": "", "Color": "" },
        { "Id": 1051, "Type": 0x201, "Index": 53, "Line": "6", "LT": "", "LB": "", "Color": "" },
        { "Id": 1052, "Type": 0x201, "Index": 52, "Line": "6", "LT": "", "LB": "", "Color": "" },
        { "Id": 1053, "Type": 0x201, "Index": 51, "Line": "6", "LT": "", "LB": "", "Color": "" },
        { "Id": 1054, "Type": 0x201, "Index": 50, "Line": "6", "LT": "", "LB": "", "Color": "" },
        { "Id": 1055, "Type": 0x201, "Index": 49, "Line": "6", "LT": "", "LB": "", "Color": "" },
        { "Id": 1056, "Type": 0x201, "Index": 48, "Line": "8", "LT": "", "LB": "lsb", "Color": "" },
        { "Id": 1057, "Type": 0x201, "Index": 63, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1058, "Type": 0x201, "Index": 62, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1059, "Type": 0x201, "Index": 61, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1060, "Type": 0x201, "Index": 60, "Line": "0", "LT": "RadarState_RCS_Threshold", "LB": "msb", "Color": "navajowhite" },
        { "Id": 1061, "Type": 0x201, "Index": 59, "Line": "6", "LT": "", "LB": "", "Color": "navajowhite" },
        { "Id": 1062, "Type": 0x201, "Index": 58, "Line": "8", "LT": "", "LB": "lsb", "Color": "navajowhite" },
        { "Id": 1063, "Type": 0x201, "Index": 57, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 1064, "Type": 0x201, "Index": 56, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 4001, "Type": 0x408, "Index": 7, "Line": "0", "LT": "CollDetState_NofRegions", "LB": "msb", "Color": "lime" },
        { "Id": 4002, "Type": 0x408, "Index": 6, "Line": "6", "LT": "", "LB": "", "Color": "lime" },
        { "Id": 4003, "Type": 0x408, "Index": 5, "Line": "6", "LT": "", "LB": "", "Color": "lime" },
        { "Id": 4004, "Type": 0x408, "Index": 4, "Line": "8", "LT": "", "LB": "lsb", "Color": "lime" },
        { "Id": 4005, "Type": 0x408, "Index": 3, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 4006, "Type": 0x408, "Index": 2, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 4007, "Type": 0x408, "Index": 1, "Line": "2", "LT": "CollDetState_Activation", "LB": "", "Color": "green" },
        { "Id": 4008, "Type": 0x408, "Index": 0, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 4009, "Type": 0x408, "Index": 15, "Line": "0", "LT": "CollDetState_MinDetectTime", "LB": "msb", "Color": "teal" },
        { "Id": 4010, "Type": 0x408, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 4011, "Type": 0x408, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 4012, "Type": 0x408, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 4013, "Type": 0x408, "Index": 11, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 4014, "Type": 0x408, "Index": 10, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 4015, "Type": 0x408, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "teal" },
        { "Id": 4016, "Type": 0x408, "Index": 8, "Line": "8", "LT": "", "LB": "lsb", "Color": "teal" },
        { "Id": 4017, "Type": 0x408, "Index": 23, "Line": "0", "LT": "CollDetState_MeasCounter", "LB": "msb", "Color": "hotpink" },
        { "Id": 4018, "Type": 0x408, "Index": 22, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4019, "Type": 0x408, "Index": 21, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4020, "Type": 0x408, "Index": 20, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4021, "Type": 0x408, "Index": 19, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4022, "Type": 0x408, "Index": 18, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4023, "Type": 0x408, "Index": 17, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4024, "Type": 0x408, "Index": 16, "Line": "7", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4025, "Type": 0x408, "Index": 31, "Line": "3", "LT": "CollDetState_MeasCounter", "LB": "", "Color": "hotpink" },
        { "Id": 4026, "Type": 0x408, "Index": 30, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4027, "Type": 0x408, "Index": 29, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4028, "Type": 0x408, "Index": 28, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4029, "Type": 0x408, "Index": 27, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4030, "Type": 0x408, "Index": 26, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4031, "Type": 0x408, "Index": 25, "Line": "6", "LT": "", "LB": "", "Color": "hotpink" },
        { "Id": 4032, "Type": 0x408, "Index": 24, "Line": "8", "LT": "", "LB": "lsb", "Color": "hotpink" },
        { "Id": 5001, "Type": 0x402, "Index": 7, "Line": "0", "LT": "CollDetRegState_RegionID", "LB": "msb", "Color": "#84ff42" },
        { "Id": 5002, "Type": 0x402, "Index": 6, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 5003, "Type": 0x402, "Index": 5, "Line": "8", "LT": "", "LB": "lsb", "Color": "#84ff42" },
        { "Id": 5004, "Type": 0x402, "Index": 4, "Line": "0", "LT": "CollDetRegState_WarningLevel", "LB": "msb", "Color": "#ff8442" },
        { "Id": 5005, "Type": 0x402, "Index": 3, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff8442" },
        { "Id": 5006, "Type": 0x402, "Index": 2, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 5007, "Type": 0x402, "Index": 1, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 5008, "Type": 0x402, "Index": 0, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 5009, "Type": 0x402, "Index": 15, "Line": "0", "LT": "CollDetRegState_Point1X", "LB": "msb", "Color": "#4284c4" },
        { "Id": 5010, "Type": 0x402, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5011, "Type": 0x402, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5012, "Type": 0x402, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5013, "Type": 0x402, "Index": 11, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5014, "Type": 0x402, "Index": 10, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5015, "Type": 0x402, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5016, "Type": 0x402, "Index": 8, "Line": "7", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5017, "Type": 0x402, "Index": 23, "Line": "3", "LT": "CollDetRegState_Point1X", "LB": "", "Color": "#4284c4" },
        { "Id": 5018, "Type": 0x402, "Index": 22, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5019, "Type": 0x402, "Index": 21, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5020, "Type": 0x402, "Index": 20, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 5021, "Type": 0x402, "Index": 19, "Line": "8", "LT": "", "LB": "lsb", "Color": "#4284c4" },
        { "Id": 5022, "Type": 0x402, "Index": 18, "Line": "0", "LT": "CollDetRegState_Point1Y", "LB": "msb", "Color": "#ffc484" },
        { "Id": 5023, "Type": 0x402, "Index": 17, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 5024, "Type": 0x402, "Index": 16, "Line": "7", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 5025, "Type": 0x402, "Index": 31, "Line": "3", "LT": "CollDetRegState_Point1Y", "LB": "", "Color": "#ffc484" },
        { "Id": 5026, "Type": 0x402, "Index": 30, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 5027, "Type": 0x402, "Index": 29, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 5028, "Type": 0x402, "Index": 28, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 5029, "Type": 0x402, "Index": 27, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 5030, "Type": 0x402, "Index": 26, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 5031, "Type": 0x402, "Index": 25, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 5032, "Type": 0x402, "Index": 24, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ffc484" },
        { "Id": 5033, "Type": 0x402, "Index": 39, "Line": "0", "LT": "CollDetRegState_Point2X", "LB": "msb", "Color": "#42ff84" },
        { "Id": 5034, "Type": 0x402, "Index": 38, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5035, "Type": 0x402, "Index": 37, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5036, "Type": 0x402, "Index": 36, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5037, "Type": 0x402, "Index": 35, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5038, "Type": 0x402, "Index": 34, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5039, "Type": 0x402, "Index": 33, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5040, "Type": 0x402, "Index": 32, "Line": "7", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5041, "Type": 0x402, "Index": 47, "Line": "3", "LT": "CollDetRegState_Point2X", "LB": "", "Color": "#42ff84" },
        { "Id": 5042, "Type": 0x402, "Index": 46, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5043, "Type": 0x402, "Index": 45, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5044, "Type": 0x402, "Index": 44, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 5045, "Type": 0x402, "Index": 43, "Line": "8", "LT": "", "LB": "lsb", "Color": "#42ff84" },
        { "Id": 5046, "Type": 0x402, "Index": 42, "Line": "0", "LT": "CollDetRegState_Point2Y", "LB": "msb", "Color": "#ff84c4" },
        { "Id": 5047, "Type": 0x402, "Index": 41, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 5048, "Type": 0x402, "Index": 40, "Line": "7", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 5049, "Type": 0x402, "Index": 55, "Line": "3", "LT": "CollDetRegState_Point2Y", "LB": "", "Color": "#ff84c4" },
        { "Id": 5050, "Type": 0x402, "Index": 54, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 5051, "Type": 0x402, "Index": 53, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 5052, "Type": 0x402, "Index": 52, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 5053, "Type": 0x402, "Index": 51, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 5054, "Type": 0x402, "Index": 50, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 5055, "Type": 0x402, "Index": 49, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 5056, "Type": 0x402, "Index": 48, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff84c4" },
        { "Id": 5057, "Type": 0x402, "Index": 63, "Line": "0", "LT": "CollDetRegState_NofObjects", "LB": "msb", "Color": "#84c442" },
        { "Id": 5058, "Type": 0x402, "Index": 62, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 5059, "Type": 0x402, "Index": 61, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 5060, "Type": 0x402, "Index": 60, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 5061, "Type": 0x402, "Index": 59, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 5062, "Type": 0x402, "Index": 58, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 5063, "Type": 0x402, "Index": 57, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 5064, "Type": 0x402, "Index": 56, "Line": "8", "LT": "", "LB": "lsb", "Color": "#84c442" },
        { "Id": 6001, "Type": 0x700, "Index": 7, "Line": "0", "LT": "Version_MajorRelease", "LB": "msb", "Color": "#42ff84" },
        { "Id": 6002, "Type": 0x700, "Index": 6, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 6003, "Type": 0x700, "Index": 5, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 6004, "Type": 0x700, "Index": 4, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 6005, "Type": 0x700, "Index": 3, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 6006, "Type": 0x700, "Index": 2, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 6007, "Type": 0x700, "Index": 1, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 6008, "Type": 0x700, "Index": 0, "Line": "8", "LT": "", "LB": "lsb", "Color": "#42ff84" },
        { "Id": 6009, "Type": 0x700, "Index": 15, "Line": "0", "LT": "Version_MinorRelease", "LB": "msb", "Color": "#ffc484" },
        { "Id": 6010, "Type": 0x700, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 6011, "Type": 0x700, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 6012, "Type": 0x700, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 6013, "Type": 0x700, "Index": 11, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 6014, "Type": 0x700, "Index": 10, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 6015, "Type": 0x700, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 6016, "Type": 0x700, "Index": 8, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ffc484" },
        { "Id": 6017, "Type": 0x700, "Index": 23, "Line": "0", "LT": "Version_PatchLevel", "LB": "msb", "Color": "#4284c4" },
        { "Id": 6018, "Type": 0x700, "Index": 22, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 6019, "Type": 0x700, "Index": 21, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 6020, "Type": 0x700, "Index": 20, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 6021, "Type": 0x700, "Index": 19, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 6022, "Type": 0x700, "Index": 18, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 6023, "Type": 0x700, "Index": 17, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 6024, "Type": 0x700, "Index": 16, "Line": "8", "LT": "", "LB": "lsb", "Color": "#4284c4" },
        { "Id": 6025, "Type": 0x700, "Index": 31, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 6026, "Type": 0x700, "Index": 30, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 6027, "Type": 0x700, "Index": 29, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 6028, "Type": 0x700, "Index": 28, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 6029, "Type": 0x700, "Index": 27, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 6030, "Type": 0x700, "Index": 26, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 6031, "Type": 0x700, "Index": 25, "Line": "2", "LT": "Version_ExtendedRange", "LB": "", "Color": "#84ff42" },
        { "Id": 6032, "Type": 0x700, "Index": 24, "Line": "2", "LT": "Version_CountryCode", "LB": "", "Color": "#ff84c4" },
        { "Id": 7001, "Type": 0x60A, "Index": 7, "Line": "0", "LT": "Object_NofObjects", "LB": "msb", "Color": "#42ff84" },
        { "Id": 7002, "Type": 0x60A, "Index": 6, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 7003, "Type": 0x60A, "Index": 5, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 7004, "Type": 0x60A, "Index": 4, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 7005, "Type": 0x60A, "Index": 3, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 7006, "Type": 0x60A, "Index": 2, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 7007, "Type": 0x60A, "Index": 1, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 7008, "Type": 0x60A, "Index": 0, "Line": "8", "LT": "", "LB": "lsb", "Color": "#42ff84" },
        { "Id": 7009, "Type": 0x60A, "Index": 15, "Line": "0", "LT": "Object_MeasCounter", "LB": "msb", "Color": "#ffc484" },
        { "Id": 7010, "Type": 0x60A, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7011, "Type": 0x60A, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7012, "Type": 0x60A, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7013, "Type": 0x60A, "Index": 11, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7014, "Type": 0x60A, "Index": 10, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7015, "Type": 0x60A, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7016, "Type": 0x60A, "Index": 8, "Line": "7", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7017, "Type": 0x60A, "Index": 23, "Line": "3", "LT": "Object_MeasCounter", "LB": "", "Color": "#ffc484" },
        { "Id": 7018, "Type": 0x60A, "Index": 22, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7019, "Type": 0x60A, "Index": 21, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7020, "Type": 0x60A, "Index": 20, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7021, "Type": 0x60A, "Index": 19, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7022, "Type": 0x60A, "Index": 18, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7023, "Type": 0x60A, "Index": 17, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 7024, "Type": 0x60A, "Index": 16, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ffc484" },
        { "Id": 7025, "Type": 0x60A, "Index": 31, "Line": "0", "LT": "Object_InterfaceVersion", "LB": "msb", "Color": "#4284c4" },
        { "Id": 7026, "Type": 0x60A, "Index": 30, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 7027, "Type": 0x60A, "Index": 29, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 7028, "Type": 0x60A, "Index": 28, "Line": "8", "LT": "", "LB": "lsb", "Color": "#4284c4" },
        { "Id": 7029, "Type": 0x60A, "Index": 27, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 7030, "Type": 0x60A, "Index": 26, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 7031, "Type": 0x60A, "Index": 25, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 7032, "Type": 0x60A, "Index": 24, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 8001, "Type": 0x60B, "Index": 7, "Line": "0", "LT": "Object_ID", "LB": "msb", "Color": "#ff84c4" },
        { "Id": 8002, "Type": 0x60B, "Index": 6, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 8003, "Type": 0x60B, "Index": 5, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 8004, "Type": 0x60B, "Index": 4, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 8005, "Type": 0x60B, "Index": 3, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 8006, "Type": 0x60B, "Index": 2, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 8007, "Type": 0x60B, "Index": 1, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 8008, "Type": 0x60B, "Index": 0, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff84c4" },
        { "Id": 8009, "Type": 0x60B, "Index": 15, "Line": "0", "LT": "Object_DistLong", "LB": "msb", "Color": "#42ff84" },
        { "Id": 8010, "Type": 0x60B, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8011, "Type": 0x60B, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8012, "Type": 0x60B, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8013, "Type": 0x60B, "Index": 11, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8014, "Type": 0x60B, "Index": 10, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8015, "Type": 0x60B, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8016, "Type": 0x60B, "Index": 8, "Line": "7", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8017, "Type": 0x60B, "Index": 23, "Line": "3", "LT": "Object_DistLong", "LB": "", "Color": "#42ff84" },
        { "Id": 8018, "Type": 0x60B, "Index": 22, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8019, "Type": 0x60B, "Index": 21, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8020, "Type": 0x60B, "Index": 20, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 8021, "Type": 0x60B, "Index": 19, "Line": "8", "LT": "", "LB": "lsb", "Color": "#42ff84" },
        { "Id": 8022, "Type": 0x60B, "Index": 18, "Line": "0", "LT": "Object_DistLat", "LB": "msb", "Color": "#4284c4" },
        { "Id": 8023, "Type": 0x60B, "Index": 17, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 8024, "Type": 0x60B, "Index": 16, "Line": "7", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 8025, "Type": 0x60B, "Index": 31, "Line": "3", "LT": "Object_DistLat", "LB": "", "Color": "#4284c4" },
        { "Id": 8026, "Type": 0x60B, "Index": 30, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 8027, "Type": 0x60B, "Index": 29, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 8028, "Type": 0x60B, "Index": 28, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 8029, "Type": 0x60B, "Index": 27, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 8030, "Type": 0x60B, "Index": 26, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 8031, "Type": 0x60B, "Index": 25, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 8032, "Type": 0x60B, "Index": 24, "Line": "8", "LT": "", "LB": "lsb", "Color": "#4284c4" },
        { "Id": 8033, "Type": 0x60B, "Index": 39, "Line": "0", "LT": "Object_VrelLong", "LB": "msb", "Color": "#ffc484" },
        { "Id": 8034, "Type": 0x60B, "Index": 38, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 8035, "Type": 0x60B, "Index": 37, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 8036, "Type": 0x60B, "Index": 36, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 8037, "Type": 0x60B, "Index": 35, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 8038, "Type": 0x60B, "Index": 34, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 8039, "Type": 0x60B, "Index": 33, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 8040, "Type": 0x60B, "Index": 32, "Line": "7", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 8041, "Type": 0x60B, "Index": 47, "Line": "3", "LT": "Object_VrelLong", "LB": "", "Color": "#ffc484" },
        { "Id": 8042, "Type": 0x60B, "Index": 46, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ffc484" },
        { "Id": 8043, "Type": 0x60B, "Index": 45, "Line": "0", "LT": "Object_VrelLat", "LB": "msb", "Color": "#84ff42" },
        { "Id": 8044, "Type": 0x60B, "Index": 44, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 8045, "Type": 0x60B, "Index": 43, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 8046, "Type": 0x60B, "Index": 42, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 8047, "Type": 0x60B, "Index": 41, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 8048, "Type": 0x60B, "Index": 40, "Line": "7", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 8049, "Type": 0x60B, "Index": 55, "Line": "3", "LT": "Object_VrelLat", "LB": "", "Color": "#84ff42" },
        { "Id": 8050, "Type": 0x60B, "Index": 54, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 8051, "Type": 0x60B, "Index": 53, "Line": "8", "LT": "", "LB": "lsb", "Color": "#84ff42" },
        { "Id": 8052, "Type": 0x60B, "Index": 52, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 8053, "Type": 0x60B, "Index": 51, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 8054, "Type": 0x60B, "Index": 50, "Line": "0", "LT": "Object_DynProp", "LB": "msb", "Color": "#ff8442" },
        { "Id": 8055, "Type": 0x60B, "Index": 49, "Line": "6", "LT": "", "LB": "", "Color": "#ff8442" },
        { "Id": 8056, "Type": 0x60B, "Index": 48, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff8442" },
        { "Id": 8057, "Type": 0x60B, "Index": 63, "Line": "0", "LT": "Object_RCS", "LB": "msb", "Color": "#84c442" },
        { "Id": 8058, "Type": 0x60B, "Index": 62, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 8059, "Type": 0x60B, "Index": 61, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 8060, "Type": 0x60B, "Index": 60, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 8061, "Type": 0x60B, "Index": 59, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 8062, "Type": 0x60B, "Index": 58, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 8063, "Type": 0x60B, "Index": 57, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 8064, "Type": 0x60B, "Index": 56, "Line": "8", "LT": "", "LB": "lsb", "Color": "#84c442" },
        { "Id": 9001, "Type": 0x60C, "Index": 7, "Line": "0", "LT": "Obj_ID", "LB": "msb", "Color": "#4284c4" },
        { "Id": 9002, "Type": 0x60C, "Index": 6, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 9003, "Type": 0x60C, "Index": 5, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 9004, "Type": 0x60C, "Index": 4, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 9005, "Type": 0x60C, "Index": 3, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 9006, "Type": 0x60C, "Index": 2, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 9007, "Type": 0x60C, "Index": 1, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 9008, "Type": 0x60C, "Index": 0, "Line": "8", "LT": "", "LB": "lsb", "Color": "#4284c4" },
        { "Id": 9009, "Type": 0x60C, "Index": 15, "Line": "0", "LT": "Obj_DistLong_rms", "LB": "msb", "Color": "#42ff84" },
        { "Id": 9010, "Type": 0x60C, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 9011, "Type": 0x60C, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 9012, "Type": 0x60C, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 9013, "Type": 0x60C, "Index": 11, "Line": "8", "LT": "", "LB": "lsb", "Color": "#42ff84" },
        { "Id": 9014, "Type": 0x60C, "Index": 10, "Line": "0", "LT": "Obj_DistLat_rms", "LB": "msb", "Color": "#ffc484" },
        { "Id": 9015, "Type": 0x60C, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 9016, "Type": 0x60C, "Index": 8, "Line": "7", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 9017, "Type": 0x60C, "Index": 23, "Line": "3", "LT": "Obj_DistLat_rms", "LB": "", "Color": "#ffc484" },
        { "Id": 9018, "Type": 0x60C, "Index": 22, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ffc484" },
        { "Id": 9019, "Type": 0x60C, "Index": 21, "Line": "0", "LT": "Obj_VrelLong_rms", "LB": "msb", "Color": "#84c442" },
        { "Id": 9020, "Type": 0x60C, "Index": 20, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 9021, "Type": 0x60C, "Index": 19, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 9022, "Type": 0x60C, "Index": 18, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 9023, "Type": 0x60C, "Index": 17, "Line": "8", "LT": "", "LB": "lsb", "Color": "#84c442" },
        { "Id": 9024, "Type": 0x60C, "Index": 16, "Line": "1", "LT": "Obj_VrelLat_rms", "LB": "msb", "Color": "#84ff42" },
        { "Id": 9025, "Type": 0x60C, "Index": 31, "Line": "7", "LT": "Obj_VrelLat_rms", "LB": "", "Color": "#84ff42" },
        { "Id": 9026, "Type": 0x60C, "Index": 30, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 9027, "Type": 0x60C, "Index": 29, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 9028, "Type": 0x60C, "Index": 28, "Line": "8", "LT": "", "LB": "lsb", "Color": "#84ff42" },
        { "Id": 9029, "Type": 0x60C, "Index": 27, "Line": "0", "LT": "Obj_ArelLong_rms", "LB": "msb", "Color": "#c44284" },
        { "Id": 9030, "Type": 0x60C, "Index": 26, "Line": "6", "LT": "", "LB": "", "Color": "#c44284" },
        { "Id": 9031, "Type": 0x60C, "Index": 25, "Line": "6", "LT": "", "LB": "", "Color": "#c44284" },
        { "Id": 9032, "Type": 0x60C, "Index": 24, "Line": "3", "LT": "", "LB": "", "Color": "#c44284" },
        { "Id": 9033, "Type": 0x60C, "Index": 39, "Line": "5", "LT": "Obj_ArelLong_rms", "LB": "lsb", "Color": "#c44284" },
        { "Id": 9034, "Type": 0x60C, "Index": 38, "Line": "0", "LT": "Obj_ArelLat_rms", "LB": "msb", "Color": "#ff8442" },
        { "Id": 9035, "Type": 0x60C, "Index": 37, "Line": "6", "LT": "", "LB": "", "Color": "#ff8442" },
        { "Id": 9036, "Type": 0x60C, "Index": 36, "Line": "6", "LT": "", "LB": "", "Color": "#ff8442" },
        { "Id": 9037, "Type": 0x60C, "Index": 35, "Line": "6", "LT": "", "LB": "", "Color": "#ff8442" },
        { "Id": 9038, "Type": 0x60C, "Index": 34, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff8442" },
        { "Id": 9039, "Type": 0x60C, "Index": 33, "Line": "0", "LT": "Obj_Orientation_rms", "LB": "msb", "Color": "#ff84c4" },
        { "Id": 9040, "Type": 0x60C, "Index": 32, "Line": "7", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 9041, "Type": 0x60C, "Index": 47, "Line": "3", "LT": "Obj_Orientation_rms", "LB": "", "Color": "#ff84c4" },
        { "Id": 9042, "Type": 0x60C, "Index": 46, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 9043, "Type": 0x60C, "Index": 45, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff84c4" },
        { "Id": 9044, "Type": 0x60C, "Index": 44, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 9045, "Type": 0x60C, "Index": 43, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 9046, "Type": 0x60C, "Index": 42, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 9047, "Type": 0x60C, "Index": 41, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 9048, "Type": 0x60C, "Index": 40, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 9049, "Type": 0x60C, "Index": 55, "Line": "0", "LT": "Obj_ProbOfExist", "LB": "msb", "Color": "#42c4ff" },
        { "Id": 9050, "Type": 0x60C, "Index": 54, "Line": "6", "LT": "", "LB": "", "Color": "#42c4ff" },
        { "Id": 9051, "Type": 0x60C, "Index": 53, "Line": "8", "LT": "", "LB": "lsb", "Color": "#42c4ff" },
        { "Id": 9052, "Type": 0x60C, "Index": 52, "Line": "0", "LT": "Obj_MeasState", "LB": "msb", "Color": "#c4ff84" },
        { "Id": 9053, "Type": 0x60C, "Index": 51, "Line": "6", "LT": "", "LB": "", "Color": "#c4ff84" },
        { "Id": 9054, "Type": 0x60C, "Index": 50, "Line": "8", "LT": "", "LB": "lsb", "Color": "#c4ff84" },
        { "Id": 9055, "Type": 0x60C, "Index": 49, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 9056, "Type": 0x60C, "Index": 48, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 10001, "Type": 0x60D, "Index": 7, "Line": "0", "LT": "Object_ID", "LB": "msb", "Color": "#84ff42" },
        { "Id": 10002, "Type": 0x60D, "Index": 6, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 10003, "Type": 0x60D, "Index": 5, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 10004, "Type": 0x60D, "Index": 4, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 10005, "Type": 0x60D, "Index": 3, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 10006, "Type": 0x60D, "Index": 2, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 10007, "Type": 0x60D, "Index": 1, "Line": "6", "LT": "", "LB": "", "Color": "#84ff42" },
        { "Id": 10008, "Type": 0x60D, "Index": 0, "Line": "8", "LT": "", "LB": "lsb", "Color": "#84ff42" },
        { "Id": 10009, "Type": 0x60D, "Index": 15, "Line": "0", "LT": "Object_ArelLong", "LB": "msb", "Color": "#4284c4" },
        { "Id": 10010, "Type": 0x60D, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 10011, "Type": 0x60D, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 10012, "Type": 0x60D, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 10013, "Type": 0x60D, "Index": 11, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 10014, "Type": 0x60D, "Index": 10, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 10015, "Type": 0x60D, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 10016, "Type": 0x60D, "Index": 8, "Line": "7", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 10017, "Type": 0x60D, "Index": 23, "Line": "3", "LT": "Object_ArelLong", "LB": "", "Color": "#4284c4" },
        { "Id": 10018, "Type": 0x60D, "Index": 22, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 10019, "Type": 0x60D, "Index": 21, "Line": "8", "LT": "", "LB": "lsb", "Color": "#4284c4" },
        { "Id": 10020, "Type": 0x60D, "Index": 20, "Line": "0", "LT": "Object_ArelLat", "LB": "msb", "Color": "#84c442" },
        { "Id": 10021, "Type": 0x60D, "Index": 19, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 10022, "Type": 0x60D, "Index": 18, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 10023, "Type": 0x60D, "Index": 17, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 10024, "Type": 0x60D, "Index": 16, "Line": "7", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 10025, "Type": 0x60D, "Index": 31, "Line": "3", "LT": "Object_ArelLat", "LB": "", "Color": "#84c442" },
        { "Id": 10026, "Type": 0x60D, "Index": 30, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 10027, "Type": 0x60D, "Index": 29, "Line": "6", "LT": "", "LB": "", "Color": "#84c442" },
        { "Id": 10028, "Type": 0x60D, "Index": 28, "Line": "8", "LT": "", "LB": "lsb", "Color": "#84c442" },
        { "Id": 10029, "Type": 0x60D, "Index": 27, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 10030, "Type": 0x60D, "Index": 26, "Line": "0", "LT": "Object_Class", "LB": "msb", "Color": "#ff8442" },
        { "Id": 10031, "Type": 0x60D, "Index": 25, "Line": "6", "LT": "", "LB": "", "Color": "#ff8442" },
        { "Id": 10032, "Type": 0x60D, "Index": 24, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff8442" },
        { "Id": 10033, "Type": 0x60D, "Index": 39, "Line": "0", "LT": "Object_OrientationAngel", "LB": "msb", "Color": "#ff84c4" },
        { "Id": 10034, "Type": 0x60D, "Index": 38, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 10035, "Type": 0x60D, "Index": 37, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 10036, "Type": 0x60D, "Index": 36, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 10037, "Type": 0x60D, "Index": 35, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 10038, "Type": 0x60D, "Index": 34, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 10039, "Type": 0x60D, "Index": 33, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 10040, "Type": 0x60D, "Index": 32, "Line": "3", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 10041, "Type": 0x60D, "Index": 47, "Line": "7", "LT": "Object_OrientationAngel", "LB": "", "Color": "#ff84c4" },
        { "Id": 10042, "Type": 0x60D, "Index": 46, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff84c4" },
        { "Id": 10043, "Type": 0x60D, "Index": 45, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 10044, "Type": 0x60D, "Index": 44, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 10045, "Type": 0x60D, "Index": 43, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 10046, "Type": 0x60D, "Index": 42, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 10047, "Type": 0x60D, "Index": 41, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 10048, "Type": 0x60D, "Index": 40, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 10049, "Type": 0x60D, "Index": 55, "Line": "0", "LT": "Object_Length", "LB": "msb", "Color": "#ffc484" },
        { "Id": 10050, "Type": 0x60D, "Index": 54, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 10051, "Type": 0x60D, "Index": 53, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 10052, "Type": 0x60D, "Index": 52, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 10053, "Type": 0x60D, "Index": 51, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 10054, "Type": 0x60D, "Index": 50, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 10055, "Type": 0x60D, "Index": 49, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 10056, "Type": 0x60D, "Index": 48, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ffc484" },
        { "Id": 10057, "Type": 0x60D, "Index": 63, "Line": "0", "LT": "Object_Width", "LB": "msb", "Color": "#42ff84" },
        { "Id": 10058, "Type": 0x60D, "Index": 62, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 10059, "Type": 0x60D, "Index": 61, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 10060, "Type": 0x60D, "Index": 60, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 10061, "Type": 0x60D, "Index": 59, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 10062, "Type": 0x60D, "Index": 58, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 10063, "Type": 0x60D, "Index": 57, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 10064, "Type": 0x60D, "Index": 56, "Line": "8", "LT": "", "LB": "lsb", "Color": "#42ff84" },
        { "Id": 11001, "Type": 0x60E, "Index": 7, "Line": "0", "LT": "Object_ID", "LB": "msb", "Color": "#4284c4" },
        { "Id": 11002, "Type": 0x60E, "Index": 6, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 11003, "Type": 0x60E, "Index": 5, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 11004, "Type": 0x60E, "Index": 4, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 11005, "Type": 0x60E, "Index": 3, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 11006, "Type": 0x60E, "Index": 2, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 11007, "Type": 0x60E, "Index": 1, "Line": "6", "LT": "", "LB": "", "Color": "#4284c4" },
        { "Id": 11008, "Type": 0x60E, "Index": 0, "Line": "8", "LT": "", "LB": "lsb", "Color": "#4284c4" },
        { "Id": 11009, "Type": 0x60E, "Index": 15, "Line": "0", "LT": "Object_CollDetRegionBitfield", "LB": "msb", "Color": "#ffc484" },
        { "Id": 11010, "Type": 0x60E, "Index": 14, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 11011, "Type": 0x60E, "Index": 13, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 11012, "Type": 0x60E, "Index": 12, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 11013, "Type": 0x60E, "Index": 11, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 11014, "Type": 0x60E, "Index": 10, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 11015, "Type": 0x60E, "Index": 9, "Line": "6", "LT": "", "LB": "", "Color": "#ffc484" },
        { "Id": 11016, "Type": 0x60E, "Index": 8, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ffc484" },
        { "Id": 11017, "Type": 0x60E, "Index": 23, "Line": "0", "LT": "Reserved", "LB": "msb", "Color": "#42ff84" },
        { "Id": 11018, "Type": 0x60E, "Index": 22, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 11019, "Type": 0x60E, "Index": 21, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 11020, "Type": 0x60E, "Index": 20, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 11021, "Type": 0x60E, "Index": 19, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 11022, "Type": 0x60E, "Index": 18, "Line": "6", "LT": "", "LB": "", "Color": "#42ff84" },
        { "Id": 11023, "Type": 0x60E, "Index": 17, "Line": "8", "LT": "", "LB": "lsb", "Color": "#42ff84" },
        { "Id": 11024, "Type": 0x60E, "Index": 16, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 11025, "Type": 0x60E, "Index": 31, "Line": "0", "LT": "Reserved", "LB": "msb", "Color": "#ff84c4" },
        { "Id": 11026, "Type": 0x60E, "Index": 30, "Line": "6", "LT": "", "LB": "", "Color": "#ff84c4" },
        { "Id": 11027, "Type": 0x60E, "Index": 29, "Line": "8", "LT": "", "LB": "lsb", "Color": "#ff84c4" },
        { "Id": 11028, "Type": 0x60E, "Index": 28, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 11029, "Type": 0x60E, "Index": 27, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 11030, "Type": 0x60E, "Index": 26, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 11031, "Type": 0x60E, "Index": 25, "Line": "", "LT": "", "LB": "", "Color": "" },
        { "Id": 11032, "Type": 0x60E, "Index": 24, "Line": "", "LT": "", "LB": "", "Color": "" },
    ];

    public TypeMap: Map<number, string> = new Map([
        [-1, '无'],
        [0, '全部'],
        [0x201, '0x201'],
        [0x402, '0x402'],
        [0x408, '0x408'],
        [0x700, '0x700'],
        [0x60A, '0x60A'],
        [0x60B, '0x60B'],
        [0x60C, '0x60C'],
        [0x60D, '0x60D'],
        [0x60E, '0x60E'],
    ]);

    public Capacity: number = 64;

    /**
     * 协议类型
     */
    public Type: Ref<number> = ref(0);

    public Datas: UnwrapNestedRefs<Array<ClientMessage.MillimeterWaveRadarProtocolData>> = reactive([]);
    public DataType: Ref<number> = ref(-1);
    public DataBits: Ref<Array<number>> = ref([]);

    public DocumentUrl: Ref<string> = ref('/static/Exam/协议解析.pdf');

    public ShowDocument: Ref<boolean> = ref(false);
    public ShowTool: Ref<boolean> = ref(false);

    public DataSource: Ref<string> = ref('Device');

    public SimulatedData: Array<ClientMessage.MillimeterWaveRadarProtocolData> = [
        new ClientMessage.MillimeterWaveRadarProtocolData(0x201, [0x40, 0x19, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x201, [0x40, 0x19, 0x00, 0x00, 0x20, 0x08, 0x00, 0x04]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x201, [0x40, 0x19, 0x00, 0x01, 0x00, 0x18, 0x00, 0x04]),

        new ClientMessage.MillimeterWaveRadarProtocolData(0x402, [0x00, 0x46, 0x53, 0xFE, 0x55, 0xF7, 0xE7, 0x00]),

        new ClientMessage.MillimeterWaveRadarProtocolData(0x408, [0x12, 0x64, 0xC4, 0x69, 0x00, 0x00, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x408, [0x12, 0x64, 0xC5, 0x41, 0x00, 0x00, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x408, [0x12, 0x64, 0xC5, 0x91, 0x00, 0x00, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x408, [0x12, 0x64, 0xC5, 0xC7, 0x00, 0x00, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x408, [0x12, 0x64, 0xC6, 0xD3, 0x00, 0x00, 0x00, 0x00]),

        new ClientMessage.MillimeterWaveRadarProtocolData(0x700, [0x04, 0x1E, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00]),

        new ClientMessage.MillimeterWaveRadarProtocolData(0x60A, [0x03, 0xD4, 0x97, 0x10, 0x00, 0x00, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60A, [0x00, 0xD6, 0xB7, 0x10, 0x00, 0x00, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60A, [0x01, 0xD9, 0x61, 0x10, 0x00, 0x00, 0x00, 0x00]),

        new ClientMessage.MillimeterWaveRadarProtocolData(0x60B, [0x05, 0x4F, 0x9B, 0xF5, 0x80, 0x20, 0x01, 0x71]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60B, [0x00, 0x4E, 0x94, 0x00, 0x80, 0x20, 0x01, 0x84]),

        new ClientMessage.MillimeterWaveRadarProtocolData(0x60C, [0x04, 0x8C, 0xA5, 0x3A, 0x02, 0x20, 0xE8, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60C, [0x01, 0x84, 0xA3, 0x3A, 0x02, 0x20, 0xE8, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60C, [0x07, 0x9C, 0xE7, 0x7C, 0x02, 0x20, 0xE8, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60C, [0x04, 0x9D, 0x2B, 0x7C, 0x82, 0x20, 0xAC, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60C, [0x00, 0xA5, 0x27, 0x8D, 0x82, 0x20, 0x64, 0x00]),

        new ClientMessage.MillimeterWaveRadarProtocolData(0x60D, [0x01, 0x7D, 0x4F, 0xA1, 0x70, 0x80, 0x0A, 0x0C]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60D, [0x04, 0x7C, 0xEF, 0xA0, 0x70, 0x80, 0x05, 0x05]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60D, [0x07, 0x7D, 0xAF, 0xA0, 0x70, 0x80, 0x05, 0x05]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60D, [0x07, 0x7C, 0x0F, 0xA0, 0x70, 0x80, 0x05, 0x05]),

        new ClientMessage.MillimeterWaveRadarProtocolData(0x60E, [0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60E, [0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
        new ClientMessage.MillimeterWaveRadarProtocolData(0x60E, [0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]),
    ];

    public FormattedData: Ref<string> = ref('');

    public ShowParserReferences = ref(false);
    public ShowParserResults = ref(false);

    private isInitialized: boolean = false;

    private watchStopHandles: Array<WatchStopHandle> = [];

    public ProtocolTypes = reactive<Array<{ Id: number, Type: string, SubmitState: boolean }>>([]);

    public async Awake(): Promise<void> {
        // this.Datas.clear();
        // this.Datas.addRange(ExamComponent.Default.Context.Configs[2].Settings)
        // console.log('协议解读初始化', ExamComponent.Default.Context.Configs[2].Settings);

        if (!this.isInitialized) {
            if (ExamComponent.Default.HasContext.value) {
                
                const request = new ClientMessage.MillimeterWaveRadarProtocolDataFilterUpdateRequest(0, ExamComponent.Default.Context.MillimeterWaveRadar.ProtocolIds);
                await WebSocketComponent.Default.PostMessageAsync(request);

                for (const id of ExamComponent.Default.Context.MillimeterWaveRadar.ProtocolIds) {
                    this.ProtocolTypes.push({ Id: id, Type: `0x${id.toString(16).toUpperCase()}`, SubmitState: false });
                }

                const definitions = ProtocolComponent.Default.DefinitionConfigs.filter(Predicate);
                function Predicate(config: ProtocolDefinitionConfig): boolean {
                    return ExamComponent.Default.Context.MillimeterWaveRadar.ProtocolIds.includes(config.Type);
                }

                for (const definition of definitions) {
                    if (!this.protocolProperties.has(definition.Type)) {
                        this.protocolProperties.set(definition.Type, new Map());
                    }
                    if (!this.protocolProperties.get(definition.Type)!.has(definition.Sign)) {
                        this.protocolProperties.get(definition.Type)!.set(definition.Sign, definition.Value);
                    }
                }
            } else {
                const request = new ClientMessage.MillimeterWaveRadarProtocolDataFilterUpdateRequest(0, Array.from(this.TypeMap.keys()).filter(id => id > 0));
                await WebSocketComponent.Default.PostMessageAsync(request);

                const protocolIds = [0x60A, 0x60B];//Array.from(this.TypeMap.keys()).filter(id => id > 0);
                function Predicate(config: ProtocolDefinitionConfig): boolean {
                    return protocolIds.includes(config.Type);
                }

                const definitions = ProtocolComponent.Default.DefinitionConfigs.filter(Predicate);

                for (const definition of definitions) {
                    if (!this.protocolProperties.has(definition.Type)) {
                        this.protocolProperties.set(definition.Type, new Map());
                    }
                    if (!this.protocolProperties.get(definition.Type)!.has(definition.Sign)) {
                        this.protocolProperties.get(definition.Type)!.set(definition.Sign, definition.Value);
                    }
                }
            }

            this.isInitialized = true;
        }

        await ExamComponent.Default.WaitLockAsync();

        WebWindowComponent.Default.SetBlackBackground();
        TooltipComponent.Default.Clear();

        // if (this.Datas.length == 0 && !ExamComponent.Default.HasContext.value) {
        //     this.Datas.addRange(this.SimulatedData);
        // }
        // this.Datas.addRange(this.SimulatedData);

        ExamComponent.Default.ReleaseLock();
    }

    public async Destroy(): Promise<void> {
        await ExamComponent.Default.WaitLockAsync();

        // this.Type.value = -1;

        ExamComponent.Default.ReleaseLock();
    }

    public Receive(datas: Array<ClientMessage.MillimeterWaveRadarProtocolData>): void {
        if (this.DataSource.value == 'Simulate') {
            return;
        }

        const count = this.Datas.length + datas.length - this.Capacity;
        this.Datas.removeAt(0, count);
        this.Datas.addRange(datas);
    }

    private OnDataSourceChanged(): void {
        if (this.DataSource.value == 'Device') {
            this.OnDataSourceChangedToDevice();
        } else {
            this.OnDataSourceChangedToSimulation();
        }
    }

    private OnDataSourceChangedToDevice(): void {
        this.Datas.clear();
    }

    private OnDataSourceChangedToSimulation(): void {
        this.Datas.clear();
        this.Datas.addRange(this.SimulatedData.filter(data => this.Type.value == 0 || data.Id == this.Type.value));
    }

    public Resolve(data: ClientMessage.MillimeterWaveRadarProtocolData): void {
        this.ShowParserReferences.value = false;
        this.ShowParserResults.value = false;

        this.DataBits.value.clear();
        for (const byte of data.Data) {
            this.DataBits.value.addRange(Array.from(byte.toString(2).padStart(8, '0')).reverse().map(char => Number.parseInt(char)));
        }
        this.FormattedData.value = `0x${data.Id.toString(16).padStart(3, '0').toUpperCase()} - ` + data.Data.map(byte => byte.toString(16).padStart(2, '0').toUpperCase()).join(' ');

        this.DataType.value = data.Id;

        // CAN信号解析
        function ResolveSingalValue(start: number, length: number, data: Array<number>): number {
            let merge = 0;
            let value = 0;

            const lsbBit = start & 7;
            const lsbByte = start >> 3;

            const msbByte = lsbByte - ((lsbBit + length - 1) >> 3);
            for (let index = msbByte; index < lsbByte + 1; index++) {
                merge += data[index] << ((lsbByte - index) << 3);
            }

            value = merge >> lsbBit;
            value = value & ((1 << length) - 1);

            return value;
        }

        const configs = this.DefinitionConfigs.filter(config => config.Type == this.DataType.value);
        console.log('configs:1111111111111111',configs);
        
        for (const config of configs) {
            const start = Number.parseInt(config.StartIndex);
            const length = Number.parseInt(config.Length);
            const resolution = Number.parseFloat(config.Resolution);
            const min = Number.parseFloat(config.Min);

            const value = ResolveSingalValue(start, length, data.Data) * resolution + min;

            config.Reference = Number.parseFloat(value.toFixed(2)).toString();
            config.Value = '';
        }
    }

    /**
     * 当前协议类型发生变化时
     * @param value 模块
     */
    private async OnTypeChangedAsync(value: number, previous: number): Promise<void> {
        this.Datas.clear();

        const request = new ClientMessage.MillimeterWaveRadarProtocolDataFilterUpdateRequest(0, [value]);
        await WebSocketComponent.Default.PostMessageAsync(request);

        if (this.DataSource.value == 'Simulate') {
            this.OnDataSourceChangedToSimulation();
        }
    }

    /**
     * 计算当前二进制Bit
     * @param index 配置索引
     */
    public CalculateBit(index: number): number {
        return index < this.DataBits.value.length ? this.DataBits.value[index] : 0;
    }

    public Convert(input: string, fromRadix: number, toRadix: number): string {
        return input == '' ? '' : Number.parseInt(input, fromRadix).toString(toRadix);
    }

    public CalculatePercent(): number {
        // const definitions = ProtocolComponent.Default.DefinitionConfigs.filter(Predicate);
        // function Predicate(config: ProtocolDefinitionConfig): boolean {
        //     // return ExamComponent.Default.HasContext.value && ExamComponent.Default.Context.MillimeterWaveRadar.has(config.Type)
        //     //     && ExamComponent.Default.Context.MillimeterWaveRadar.get(config.Type)!.Properties.includes(config.Sign);
        //     return false;
        // }

        // function Judge(config: ProtocolDefinitionConfig): boolean {
        //     return config.Value != '' && config.Reference != '' && config.Value == config.Reference;
        // }

        // return Math.round(definitions.filter(Judge).length * 100 / definitions.length);

        const definitions = ProtocolComponent.Default.DefinitionConfigs.filter(Predicate);

        if (definitions.length == 0) {
            return 0;
        }

        function Predicate(config: ProtocolDefinitionConfig): boolean {
            return ProtocolComponent.Default.protocolProperties.has(config.Type);
        }

        function Judge(config: ProtocolDefinitionConfig): boolean {
            const value = ProtocolComponent.Default.protocolProperties.get(config.Type)?.get(config.Sign) ?? '';
            console.log('得分：=========',`${config.Type} - ${config.Sign} - ${config.Reference} - ${value}`);
            return value != '' && config.Reference != '' && value == config.Reference;
        }

        return Math.round(definitions.filter(Judge).length * 100 / definitions.length) * 0.8;
    }

    private protocolProperties: Map<number, Map<string, string>> = new Map();

    public SubmitAsync(): void {
        this.ShowParserResults.value = false;
        this.ShowParserReferences.value = false;

        this.ShowParserResults.value = true;
        this.ShowParserReferences.value = true;

        const definitions = ProtocolComponent.Default.DefinitionConfigs.filter(Predicate);
        function Predicate(config: ProtocolDefinitionConfig): boolean {
            return ProtocolComponent.Default.DataType.value == config.Type;
        }

        function Judge(config: ProtocolDefinitionConfig): boolean {
            console.log(`${config.Type} - ${config.Sign} - ${config.Reference} - ${config.Value}`);
            ProtocolComponent.Default.protocolProperties.get(config.Type)!.set(config.Sign, config.Value);
            return config.Value != '' && config.Reference != '' && config.Value == config.Reference;
        }
        console.log('definitions=+++++++++++',definitions);
        const percent = Math.round(definitions.filter(Judge).length * 100 / definitions.length);

        window.Logger.Information(`协议解析得分 - ${percent} - ${this.CalculatePercent()}`);

        if (ExamComponent.Default.HasContext.value) {
            const options = ModalOptions.Default()
                .WithPrefix('/src/components/Apps/Exam/')
                .WithType('MessageBox')
                .WithContent('已提交')
                .WithButtons(['确定']);
            ModalComponent.Default.PopupAsync(options);

            const config = this.ProtocolTypes.find(item => item.Id == this.DataType.value);
            console.log('提交协议：',this.ProtocolTypes, this.DataType.value, config);
            if (config != undefined) {
                config.SubmitState = true;
            }
        }

        // const definitions = ProtocolComponent.Default.DefinitionConfigs.filter(Predicate);
        // function Predicate(config: ProtocolDefinitionConfig): boolean {
        //     return ExamComponent.Default.Context.ProtocolConfigs.has(config.Type)
        //         && ExamComponent.Default.Context.ProtocolConfigs.get(config.Type)!.Properties.includes(config.Sign);
        // }

        // function Judge(config: ProtocolDefinitionConfig): boolean {
        //     console.log(`${config.Type} - ${config.Sign} - ${config.Reference} - ${config.Value}`);
        //     return config.Value != '' && config.Reference != '' && config.Value == config.Reference;
        // }

        // this.Percent.value = Math.round(definitions.filter(Judge).length * 100 / definitions.length);

        // window.Logger.Information(`协议解析得分 - ${this.Percent.value}`);
    }
}

export class Point {
    public Name: string;
    public X: number;
    public Y: number;

    constructor(name: string, x: number = 0, y: number = 0) {
        this.Name = name;
        this.X = x;
        this.Y = y;
    }
}

/**
 *  应用组件
 */
export class UsageComponent {
    private static instance: UsageComponent = new UsageComponent();
    /**
     * 应用组件
     */
    public static get Default(): UsageComponent {
        return this.instance;
    }

    constructor() {
        window.addEventListener('unload', this.Dispose.bind(this));

        this.watchStopHandles.push(watch(this.VideoPlaying, this.OnVideoPlayingChangedAsync.bind(this)));
    }

    Dispose() {
        window.removeEventListener('unload', this.Dispose);

        for (const watchStopHandle of this.watchStopHandles) {
            watchStopHandle();
        }
        this.watchStopHandles.clear();
    }

    //#region Settings

    public BlurLevel = ref(3);

    public Points: UnwrapNestedRefs<Array<Point>> = reactive([
        new Point('A'),
        new Point('B'),
        new Point('C'),
        new Point('D'), 
        new Point('E'),
        new Point('F'),
    ]);

    public CannyLow = ref(10);
    public CannyHigh = ref(30);

    public ShowLaneState = ref(false);
    public ShowAreaState = ref(false);

    public LaneColor = ref('#6BC167');
    public LaneAlpha = ref(100);
    public AreaColor = ref('#F9BE59');
    public AreaAlpha = ref(100);

    //#endregion

    public Video: Ref<string> = ref('../UI/static/Exam/默认视频.mp4');

    public VideoMillisecondPosition: Ref<number> = ref(0);
    public VideoTotalMillisecond: Ref<number> = ref(1000 * 100);
    public VideoSpeed: Ref<number> = ref(1);
    public VideoPlaying: Ref<boolean> = ref(false);
    public VideoLastUpdateTime: Ref<number> = ref(0);

    public Percent = computed(() => this.Verify());

    private watchStopHandles: Array<WatchStopHandle> = [];

    private hasInitialized: boolean = false;

    private volume: number = 0;
    private effect: number = 0;

    public State = ref<boolean>(false);

    // public async Awake(): Promise<void> {
    //     await ExamComponent.Default.WaitLockAsync();

    //     WebWindowComponent.Default.SetTransparentBackground();
    //     TooltipComponent.Default.Clear();

    //     this.volume = await PostProcessLayerComponent.Default.AddVolumeAsync();
    //     this.effect = await PostProcessLayerComponent.Default.AddKawaseBlurAsync(this.volume);

    //     if (!this.hasInitialized) {
    //         await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraLaneDetectionRequest());

    //         if (ExamComponent.Default.HasContext.value) {
    //             this.Video.value = `../UI/static/Exam/${ExamComponent.Default.Context.BinocularCamera.File}`;

    //             console.log(ExamComponent.Default.Context.BinocularCamera);
    //             console.log(this.Video.value);
    //         }
    //         // await this.LoadVideoAsync();

    //         this.hasInitialized = true;
    //     } else {
    //         await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraLaneDetectionShowRequest());
    //     }

    //     await PostProcessLayerComponent.Default.RemoveEffectAsync(this.volume, this.effect);
    //     await PostProcessLayerComponent.Default.RemoveVolumeAsync(this.volume);

    //     ExamComponent.Default.ReleaseLock();
    // }

    // public async Destroy(): Promise<void> {
    //     await ExamComponent.Default.WaitLockAsync();

    //     this.VideoPlaying.value = false;
    //     await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraLaneDetectionHideRequest());

    //     ExamComponent.Default.ReleaseLock();
    // }

    // public async LoadVideoAsync(): Promise<void> {
    //     // await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraLaneDetectionRequest());
    //     this.State.value = true;
    //     await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraVideoSettingsRequest(
    //         false,
    //         0,
    //         100,
    //     ));

    //     const response: ClientMessage.BinocularCameraLaneDetectionOpenResponse = await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraLaneDetectionOpenRequest(this.Video.value));
    //     this.VideoPlaying.value = false;
    //     this.VideoMillisecondPosition.value = 0;
    //     this.VideoTotalMillisecond.value = response.Duration;
    //     await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraLaneDetectionShowRequest());

    //     if (response.Error != 0) {
    //         if (import.meta.env.DEV) {
    //             return;
    //         }
    //         const options = ModalOptions.Default()
    //             .WithPrefix('/src/components/Apps/BinocularCamera/')
    //             .WithType('Exit')
    //             .WithTitle('信息')
    //             .WithContent(response.Message)
    //             .WithButtons(['确定']);
    //         await ModalComponent.Default.PopupAsync(options);
    //     }
    // }

    // public async LoadDeviceAsync(): Promise<void> {
    //     this.State.value = false;
    //     // await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraLaneDetectionRequest());
    //     this.VideoPlaying.value = false;
    //     this.VideoMillisecondPosition.value = 0;

    //     await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraLaneDetectionOpenRequest('0'));
    // }

    private Verify(): number {
        let percent = 100;

        if (this.CannyLow.value > this.CannyHigh.value) {
            percent -= 40;
        } else {
            if (this.CannyLow.value >= 140 && this.CannyLow.value <= 160) {
                percent -= Math.abs(this.CannyLow.value - 150) / 10 * 20;
            } else {
                percent -= 20;
            }

            if (this.CannyHigh.value >= 170 && this.CannyHigh.value <= 190) {
                percent -= Math.abs(this.CannyHigh.value - 180) / 10 * 20;
            } else {
                percent -= 20;
            }
        }

        const results = [20, 100, 30, 80, 45, 70, 55, 70, 65, 80, 80, 100,];
        const values = this.Points.flatMap(point => [point.X, point.Y]);

        for (let index = 0; index < 12; ++index) {
            const left = results[index];
            const right = values[index];
            const factor = Math.abs(right - left) / 10;
            percent -= factor == 0 ? 0 : Math.min(factor * 5, 5);
        }

        percent = Math.min(Math.max(percent, 0), 100);

        return percent;
    }

    public async UpdateFrameIdAsync(frameId: number): Promise<void> {
        await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraFrameRequest(frameId));
    }

    public async OnNavigateToChildAsync(value: string): Promise<void> {
        this.volume = await PostProcessLayerComponent.Default.AddVolumeAsync();
        this.effect = await PostProcessLayerComponent.Default.AddKawaseBlurAsync(this.volume);

        await RouterComponent.Default.NavigateToChildAsync(value);
    }

    public async NavigateToPreviousAsync(): Promise<void> {
        RouterComponent.Default.NavigateToPrevious();

        await PostProcessLayerComponent.Default.RemoveEffectAsync(this.volume, this.effect);
        await PostProcessLayerComponent.Default.RemoveVolumeAsync(this.volume);
    }

    //#region 视频播放

    private async OnVideoPlayingChangedAsync(state: boolean): Promise<void> {
        if (state && this.VideoMillisecondPosition.value == this.VideoTotalMillisecond.value) {
            this.VideoMillisecondPosition.value = 0;
        }

        await WebSocketComponent.Default.PostMessageAsync(new ClientMessage.BinocularCameraVideoSettingsRequest(
            this.VideoPlaying.value,
            this.VideoMillisecondPosition.value * 100 / this.VideoTotalMillisecond.value | 0,
            this.VideoSpeed.value * 100,
        ));

        if (!state) {
            return;
        }

        this.VideoLastUpdateTime.value = Date.now();
        this.UpdateVideo();
    }

    private UpdateVideo(): void {
        if (!this.VideoPlaying.value || this.VideoMillisecondPosition.value == this.VideoTotalMillisecond.value) {
            this.VideoPlaying.value = false;
            return;
        }

        const timer = Date.now();
        const duration = timer - this.VideoLastUpdateTime.value;
        this.VideoLastUpdateTime.value = timer;
        if (duration != 0) {
            this.VideoMillisecondPosition.value = Math.min(this.VideoMillisecondPosition.value + duration * this.VideoSpeed.value, this.VideoTotalMillisecond.value);
        }

        window.requestAnimationFrame(this.UpdateVideo.bind(this));
    }

    public OnPrepareSeek(): void {
        this.VideoPlaying.value = false;

        window.addEventListener('mouseup', this.OnSeek.bind(this));
    }

    public OnSeek(): void {
        const percent = this.VideoMillisecondPosition.value * 100 / this.VideoTotalMillisecond.value | 0;
        console.log(percent);
        if (percent == 100) {
            this.VideoPlaying.value = false;
        } else {
            this.VideoPlaying.value = true;
        }

        window.removeEventListener('mouseup', this.OnSeek.bind(this));
    }

    //#endregion
}



